Chapter overview
In this chapter, I focus on the third of my three key questions about the development of representations of mental life: How do people of different ages deploy their conceptual representations of mental life to reason about specific entities in the world? Even more than other chapters, this question comes to life most vividly in the context of developmental comparisions; therefore I draw primarily on data from Studies 2-4, which included both adult and child samples; see [XX APPENDIX C?] for more on adults’ responses in Studies 1a-1d. For details about the methods of all studies, see Chapter II. The goal of this chapter is to provide “snapshots” of mental capacity attributions to various target characters in early childhood, middle childhood, and adulthood, and to explore in finer-grained detail more continuous changes in children’s beliefs about the mental lives of these characters between 4-9y of age.
To structure this exploration, I focus in particular to age-related differences in children’s and adults assessments of animate beings vs. inanimate beings. As discussed in Chapter I [XX CHECK THAT THIS IS TRUE], the animate-inanimate distinction has been the topic of extensive empirical and theoretical in both cognitive and developmental psychology, extending back at least as far as Piaget [XX CITE], with roots in some of the earliest discussions of mental life in the Western tradition [XX CITE PLATO, ARISTOTLE]. In the past few decades, empirical work on the animate-inanimate distinction has focused in particular on differences between animates vs. inanimates in their behaviors (e.g., their ability to engage in self-propelled movements [XX CITE R GELMAN] or to effect causal changes in the world [XX CITE SPELKE]), their observable properites (e.g., having eyes and faces, containing blood, having organs on the inside [XX CITE S GELMAN & OPFER]), and the biological processes that they engage in or are subjected to (e.g., growth, reproduction, death [XX CITE S GELMAN & OPFER]). Some studies have also explored children’s developing understanding of the minds of animate beings—but not with the structure provided by the current analysis of naturally occurring “conceptual units.” In this chapter, I aim to push this aspect of the field’s understanding of the animate-inanimate distinction forward by providing a structured analysis of attributions of physiological sensations (BODY), social-emotional abilities (HEART), and perceptual-cognitive capacities (MIND) to animate vs. inanimate beings in large samples of 4- to 9-year-old US children and adults.
General analysis plan
High-level overview
In analyzing these datasets with an eye toward documenting the application or deployment of the conceptual representations described in Chapters III-IV, the basic insight is that the attribution of specific mental capacities to specific target characters provides evidence of how conceptual representations of mental life are deployed in everyday social cognition. In Chapter II, I illustrated this with the following example: If participants who assess the mental capacities of Characters 1, 2, and 3 share one general pattern of mental capacity attributions, and participants who assess the mental capacities of Characters 4, 5, and 6 share another pattern, this provides some evidence that conceptual representations of mental life might play a role in structuring representations of (and interactions with) different classes of beings in the world. Here I will translate this general intuition into a specific analysis plan to be applied to each of these datasets in turn.
Details of analyses
All analyses in this chapter make use of the BODY, HEART, and MIND scales developed in Chapter IV to summarize participants’ respones in terms of the conceptual units identified among adults in each study (as presented in Chapter III).
For each study, I conduct two analyses of scores each of these three domains (BODY, HEART, and MIND), via Bayesian regressions. First, I compare age groups (e.g., adults vs. children), with an eye toward assessing both overall differences between age groups and differential sensitivity to the distinction between animate beings vs. inanimate objects in that domain. Second, I examine age-related differences within the child samples, again with an eye toward assessing overall increases or decreases in attributions with increasing age as well as increases or decreases in children’s sensitivity to the animate-inanimate distinction in that domain. For all analyses, I conduct Bayesian regressions on raw scores (which ranged from 0-1 for each domain), including maximal random effects structures (contingent on the range of characters included in the study and the within- vs between-subjects design of the study).
For two of these studies—Study 2 and Study 4, which both employed the “edge case” variant of the general empircal approach—the comparison between “animate beings” and “inanimate objects” is redundant with a full comparison of all target characters included in the study. To maximize comparability (and minimize unnecessary complexity), I have chosen to analyze Study 3 in a similar way, looking at differences between two groups of target characters (five animate beings vs. 4 inanimate objects) rather than attempting to analyze all possible differences among the nine “diverse characters” included in that study.
In addition to these study-specific analyses, I include both visual and numerical summaries of findings across studies and samples in the General Discussion, as well as an addition regression analysis aimed at comparing the degree of the animate-distinction across domains (BODY, HEART, and MIND) and age groups (adults, 7- to 9-year-old children, and 4- to 6-year-old children), pooling data from Studies 2-4. This analysis again includes a maximal random effects structure (random intercepts for participants nested within studies and for specific target characters); rather than being conducted over raw scores (which ranged from 0-1), it is conducted over centered scores (centered to range from -0.5 to +0.5). See Table 5.8, caption, for more details about the coding of the parameters included in this analysis.
Study 2: Conceptual change between middle childhood (7-9y) and adulthood
In the context of this dissertation, Study 2 serves to provide an initial investigation of representations of mental life earlier in development, in what I have called middle childhood (7-9y). In this chapter, I focus on what this study can reveal about changes in the deployment of this concept between middle childhood and adulthood: How do US 7- to 9-year-old children’s attributions of BODY, HEART, and MIND compare to those of adults in their cultural context?
To review, in Study 2, 200 US adults and 200 US children between the ages of 7.01-9.99 years (median: 8.31y) each assessed a single target character on 40 mental capacities. This study employed the “edge case” variant of the general approach, with participants randomly assigned to assess either a beetle or a robot. (See Chapter II for detailed methods.)
Special notes on data processing and analysis
To facilitate comparison between children and adults in Study 2, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups. For analyses using scales derived from EFA of children’s own responses, see [XX APPENDIX C?].
Results
Children vs. adults
See Figure 5.2, panel A, for BODY, HEART, and MIND scores for both target characters among the 7- to 9-year-old children and adults in Study 2.
In the aggregate, both children and adults seem to have considered the beetle—the animate “edge case” featured in this study—to be a being with a moderately high degree of physiological sensations (mean BODY score among adults: 0.72, 95% CI: [0.66-0.77]; among children: 0.82, 95% CI: [0.79-0.86]) and perceptual-cognitive capacities (mean MIND score among adults: 0.69, 95% CI: [0.64-0.73]; among children: 0.70, 95% CI: [0.67-0.74]). However, adults and children appear to have diverged in their assessments of its abilities in the HEART domain: While adults tended to grant very little in the way of social-emotional abilities (mean HEART score among adults: 0.17, 95% CI: [0.12-0.23]), children’s HEART scores tended to hover around the midpoint of the scale (mean: 0.58, 95% CI: [0.52-0.64]).
For the robot—the inanimate “edge case” featured in this study—both adults and children, in the aggregate, indicated a high degree of perceptual-cognitive abilities (mean MIND score among adults: 0.82, 95% CI: [0.77-0.87]; among children: 0.80, 95% CI: [0.76-0.84]), and appeared to agree that the robot had less in the way of physiological sensations and social-emotional abilities than the beetle. However, the two age groups appear to have diverged in their assessments of the absolute degree of BODY and HEART that they were willing to grant the robot: Adults granted very little in either domain (mean BODY score: 0.10, 95% CI: [0.07-0.14]; mean HEART score: 0.06, 95% CI: [0.03-0.09]), while children granted middling abilities in both domains (mean BODY score: 0.35, 95% CI: [0.30-0.39]; mean HEART score: 0.51, 95% CI: [0.44-0.57]).

Table 5.1: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 7- to 9-year-old children in Study 2 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the beetle compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and target character. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
|
BODY |
HEART |
MIND |
| Parameter |
b |
95% CI |
|
b |
95% CI |
|
b |
95% CI |
|
| Intercept (adults) |
0.41 |
[ 0.38, 0.44] |
* |
0.11 |
[ 0.08, 0.15] |
* |
0.75 |
[ 0.72, 0.78] |
* |
| Beetle vs. GM (adults) |
0.31 |
[ 0.28, 0.34] |
* |
0.06 |
[ 0.02, 0.10] |
* |
-0.07 |
[-0.10, -0.04] |
* |
| Children vs. adults |
0.18 |
[ 0.13, 0.22] |
* |
0.43 |
[ 0.37, 0.49] |
* |
0.00 |
[-0.05, 0.04] |
|
| Interaction |
-0.07 |
[-0.11, -0.03] |
* |
-0.02 |
[-0.08, 0.03] |
|
0.02 |
[-0.02, 0.06] |
|
A series of Bayesian regression analyses confirmed these general impressions. Children’s BODY scores were generally higher than adults’ (see Table 5.1, “Children vs. adults” row for the BODY domain), particularly for the robot (see Figure 5.2, top row); as a result, the difference between the beetle and the robot was attenuated among children, relative to adults (see Table 5.1, “Interaction” row for the BODY domain). Children’s HEART scores were also higher than adults’ (see Table 5.1, “Children vs. adults” row for the HEART domain, and Figure 5.2, middle row), but this difference did not vary substantially across target characters (see Table 5.1, “Interaction” row for the BODY domain). There were no substantial differences between children and adults in their MIND scores (see Table 5.1 and Figure 5.2, bottom row).
Taken together, these observations highlight one especially striking difference between children and adults: For both edge cases, regardless of animacy status, children attributed substantially more HEART than did adults. Indeed, fully 70% of adults in Study 2 had HEART scores < 0.08 (i.e., answered at most one of the 6 HEART items with a response of “KINDA,” and otherwise answered “NO” to all HEART items). The more uniform distribution of children’s HEART scores across the 0-1 range stands in stark contrast to this adult standard; see Figure 5.2, panel B.
Age-related differences between 7-9y
In the previous section, I compared the attributions of 7- to 9-year-old children as a group to those of adults. Here, I explore age-related differences within the child sample: How might children’s attributions change over the age range included in this study?
If the snapshots of children vs. adults are reflective of developmental changes, I would expect that, with increasing age, children’s responses would become increasingly adult-like. Based on the age group comparisons in the previous section, this would mean that age would be associated with lower BODY scores, particularly for the robot; and with lower HEART scores for both target characters.

Table 5.2: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 7- to 9-year-old children in Study 2 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit, collapsing across target characters, at the mean age for this sample (8.36y); (2) the overall difference in scores for the beetle compared to the grand mean ('GM'), at the mean age for this sample (8.36y); (3) the overall effect of age on scores, collapsing across target characters; and (4) the interactive effect of age and target character. The last two effects are highlighted in bold, because they are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
|
BODY |
HEART |
MIND |
| Parameter |
b |
95% CI |
|
b |
95% CI |
|
b |
95% CI |
|
| Intercept |
0.58 |
[ 0.55, 0.61] |
* |
0.54 |
[ 0.50, 0.59] |
* |
0.75 |
[ 0.72, 0.78] |
* |
| Beetle vs. GM |
0.24 |
[ 0.21, 0.27] |
* |
0.04 |
[-0.01, 0.08] |
|
-0.05 |
[-0.08, -0.02] |
* |
| Exact age (centered) |
-0.04 |
[-0.07, 0.00] |
* |
-0.07 |
[-0.13, -0.02] |
* |
0.04 |
[ 0.01, 0.07] |
* |
| Interaction |
0.06 |
[ 0.02, 0.09] |
* |
0.04 |
[-0.02, 0.09] |
|
0.01 |
[-0.02, 0.04] |
|
In fact, this is exactly what I observe among the 7- to 9-year-old children in this study.
In line with an adult-like understanding of the animate-inanimate distinction, BODY scores were generally higher among children who assessed the beetle (the animate target character) than among children who assessed the robot (the inanimate target character; see Table 5.2, “Beetle vs. GM” row for the BODY domain). With age, however, children’s BODY scores generally decreased (and Table 5.2, “Exact age” row for the BODY domain), driven by changes in children’s attributions of BODY to the robot. As a result, the difference between the beetle and the robot increased over the age range (see Table 5.2, “Interaction” row for the BODY domain, and Figure 5.3, leftmost plot).
Meanwhile, children’s HEART scores did not differ reliably across the two target characters in this study (see Table 5.2, “Beetle vs. GM” row for the HEART domain)—but with age, children’s HEART scores for both characters generally decreased (and Table 5.2, “Exact age” and “Interaction” rows for the HEART domain, and Figure 5.3, center plot).
Finally, MIND scores were generally higher among children who assessed the robot (the inanimate target character) than among children who assessed the beetle (the animate target character; see Table 5.2, “Beetle vs. GM” row for the MIND domain). In addition to the predicted age-related differences in the BODY and HEART domains, children’s MIND scores for both characters generally increased with age (and Table 5.2, “Exact age” and “Interaction” rows for the MIND domain, and Figure 5.3, rightmost plot).
Discussion
Adults in Study 2 distinguished strongly between the animate character (the beetle) vs. the inanimate character (the robot) in terms of their capacities in the BODY domain. They granted both of these “edge cases” relatively limited abilities in the HEART domain, and relatively strong abilities in the MIND domain (with the robot actually exceeding the beetle in its perceived MIND abilities).
Like adults, 7- to 9-year-old children clearly respected the animate-inaniamte distinction in their attributions of BODY abilities. Even among these relatively “old” children, however, there was room for increasing “adult-like-ness” across the age range: This distinction between the physiological sensations of a beetle vs. robot grew larger with increasing age, driven by decreases in BODY scores for the robot.
The biggest difference between children and adults in Study 2 was in the HEART domain. Children attributed far more HEART abilities—to both the beetle and the robot—than did adults, and although this tendency decreased across the age range, it did not appear to reach adult-like levels even among the oldest children in this sample (see Figure 5.3, center panel).
Children’s attributions of MIND to these edge cases were generally adult-like, characterized by generally high MIND scores, particularly for the robot.
Study 3: Conceptual change over early and middle childhood (4-9y)
Study 3 builds on the investigation of middle childhood (7-9y) initiated in Study 2 and extends this exploration of conceptual change into earlier childhood (4-6y). In this chapter, I again focus on what this study can reveal about changes in the deployment of this concept—i.e., the attribution of BODY, HEART, and MIND to various beings in the world—over the course of early and middle childhood (7-9y).
To review, in Study 3, 116 US adults, 125 “older” children (7.08-9.98 years; median: 8.56y), and 124 “younger” children (4.00-6.98 years; median: 5.03y) each assessed a single target character on 20 mental capacities. This study employed the “diverse characters” variant of the general approach, with participants randomly or pseudo-randomly assigned to assess one of the following 9 characters: an elephant, a goat, a mouse, a bird, a beetle, a teddy bear, a doll, a robot, or a computer. (See Chapter II for detailed methods.)
Special notes on data processing and analysis
As in Study 2, to facilitate comparison between the three age groups included in Study 3, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups. For analyses using scales derived from EFA of children’s own responses, see [XX APPENDIX C?].
Results
Children vs. adults
See Figure 5.4, panel A, for BODY, HEART, and MIND scores for each of the nine target characters among the younger children (4-6y), older children (7-9y), and adults in Study 3, and Figure 5.4, panel B, for a visualization of scores with target characters grouped into animate beings (elephant, goat, mouse, bird beetle) vs. inanimate objects (teddy bear, doll, robot, computer). To facilitate comparison with Studies 2 and 4, I will focus here on animacy status, rather than analzying all target characters individually.
In the aggregate, all three age groups seem to have considered the animate beings included in this study to have a relatively high degree of physiological sensations (mean BODY score among adults: 0.91, 95% CI: [0.87-0.94]; among older children: 0.84, 95% CI: [0.81-0.87]; among younger children: 0.73, 95% CI: [0.67-0.78]), and a middling degree of social-emotional abilities (mean HEART score among adults: 0.42, 95% CI: [0.34-0.51]; among older children: 0.54, 95% CI: [0.48-0.60]; among younger children: 0.57, 95% CI: [0.51-0.64]). Assessments of animate beings’ abilities in the MIND domain appear to have varied more by age group: While adults tended to grant animate beings a high degree of perceptual-cognitive abilities (mean MIND score among adults: 0.84, 95% CI: [0.79-0.87]), younger children’s MIND scores tended to hover around the midpoint of the scale (mean: 0.50, 95% CI: [0.43-0.56]), with older children falling in between (mean: 0.66, 95% CI: [0.60-0.71]).
For the inanimate beings included in this study, there was a high degree of consensus among adults that such entities had virtually no physiological or social-emotional abilities (mean BODY score: 0.04, 95% CI: [0.01-0.07]; mean HEART score: 0.03, 95% CI: [0.01-0.08]). In contrast, both groups of children, in the aggregate, granted low to moderate abilities to inanimate beings in both the BODY domain (mean BODY score among older children: 0.19, 95% CI: [0.13-0.25]; among younger children: 0.29, 95% CI: [0.21-0.38]) and the HEART domain (mean HEART score among older children: 0.27, 95% CI: [0.18-0.37]; among younger children: 0.32, 95% CI: [0.24-0.40]). All three age groups, in the aggregate, granted middling perceptual-cognitive abilities to these inanimate characters (which included two “intelligent” technologies; mean MIND score among adults: 0.33, 95% CI: [0.23-0.43]; among older children: 0.47, 95% CI: [0.38-0.57]; among younger children: 0.34, 95% CI: [0.24-0.43]).

Table 5.3: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 4- to 9-year-old children in Study 3 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the animate characters compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and animacy status. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses.In addition to the fixed effects listed here, these regressions included random intercepts for individual target characters (n=9). For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
|
BODY |
HEART |
MIND |
| Parameter |
b |
95% CI |
|
b |
95% CI |
|
b |
95% CI |
|
| Intercept (adults) |
0.47 |
[ 0.44, 0.51] |
* |
0.23 |
[ 0.17, 0.28] |
* |
0.58 |
[ 0.53, 0.64] |
* |
| Animate characters vs. GM (adults) |
0.44 |
[ 0.40, 0.48] |
* |
0.19 |
[ 0.14, 0.25] |
* |
0.25 |
[ 0.20, 0.31] |
* |
| Older children (7-9y) vs. adults |
0.04 |
[-0.01, 0.09] |
|
0.18 |
[ 0.11, 0.26] |
* |
-0.02 |
[-0.10, 0.05] |
|
| Younger children (4-6y) vs. adults |
0.04 |
[-0.02, 0.09] |
|
0.22 |
[ 0.14, 0.29] |
* |
-0.17 |
[-0.24, -0.09] |
* |
| Interaction: Older children (7-9y) vs. adults |
-0.11 |
[-0.16, -0.05] |
* |
-0.06 |
[-0.13, 0.02] |
|
-0.16 |
[-0.23, -0.09] |
* |
| Interaction: Younger children (4-6y) vs. adults |
-0.22 |
[-0.27, -0.16] |
* |
-0.07 |
[-0.14, 0.01] |
|
-0.17 |
[-0.25, -0.10] |
* |
A series of Bayesian regression analyses confirmed these general impressions of differences across age groups.
Neither older nor younger children’s BODY scores were generally higher than adults’ (see Table 5.3, “Older children vs. adults” and “Younger children vs. adults” rows for the BODY domain), but in both groups of children the difference in BODY scores between animate vs. inanimate characters was attenuated, relative to adults (see Table 5.3, “Interaction” row for the BODY domain). Meanwhile, in the HEART domain, both older and younger children’s HEART scores were generally higher than adults’ (see Table 5.3, “Children vs. adults” row for the HEART domain, and Figure 5.4, middle row), but this difference did not vary substantially across target characters (see Table 5.3, “Interaction” row for the BODY domain). Finally, in the MIND domain, younger children’s (but not older children’s) MIND scores were substantially lower than adults’ (see Table 5.3, “Older children vs. adults” and “Younger children vs. adults” rows for the MIND domain). In addition, in both groups of children the difference in MIND scores between animate vs. inanimate characters was attenuated, relative to adults (see Table 5.3, “Interaction” row for the MIND domain).
Age-related differences between 4-9y
Here, I shift from the “snapshot” age gropu comparisons of the previous section to an examination of age-related differences within the child sample: How might children’s attributions to these target characters change between 4-9y of age?
As I argued for Study 2, if the age group differences just described reflect developmental differences, I would expect that, with increasing age, children’s responses would become increasingly adult-like. In this case, this would mean that age would be associated with increased differentation of animate vs. inanimate characters in children’s BODY scores; lower HEART scores (regardless of target character); and higher MIND scores, particularly for animate beings.

Table 5.4: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 4- to 9-year-old children in Study 3 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit, collapsing across target characters, at the mean age for this sample (6.73y); (2) the overall difference in scores for the animate characters compared to the grand mean ('GM'), at the mean age for this sample (6.73y); (3) the overall effect of age on scores, collapsing across target characters; and (4) the interactive effect of age and animacy status. The last two effects are highlighted in bold, because they are the primary parameters of interest for these analyses. In addition to the fixed effects listed here, these regressions included random intercepts for individual target characters (n=9). For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
|
BODY |
HEART |
MIND |
| Parameter |
b |
95% CI |
|
b |
95% CI |
|
b |
95% CI |
|
| Intercept |
0.52 |
[ 0.46, 0.57] |
* |
0.43 |
[ 0.34, 0.52] |
* |
0.49 |
[ 0.41, 0.57] |
* |
| Animate characters vs. GM |
0.27 |
[ 0.22, 0.32] |
* |
0.13 |
[ 0.05, 0.22] |
* |
0.09 |
[ 0.00, 0.17] |
* |
| Exact age (centered) |
0.01 |
[-0.01, 0.02] |
|
-0.01 |
[-0.03, 0.01] |
|
0.05 |
[ 0.03, 0.07] |
* |
| Interaction |
0.03 |
[ 0.01, 0.05] |
* |
0.00 |
[-0.02, 0.02] |
|
0.00 |
[-0.02, 0.02] |
|
Some, but not all, of these predictions were born out among the 4- to 9-year-old children in this study.
Age-related differences in the BODY domain conformed to the developmental story suggested by the group differences in the previous section: BODY scores were generally higher among children who assessed one of the animate target characters (elephant, goat, mouse, bird, or beetle) than among children who assessed one of the inanimate target characters (teddy bear, doll, robot, or computer; see Table 5.4, “Animate characters vs. GM” row for the BODY domain), and this difference increased with age (see Table 5.4, “Interaction” row for the BODY domain, and Figure 5.5, panel B, leftmost plot). Visual inspection of Figure 5.5, panel A, suggests that these general trends held true for all animate vs. inanimate target characters. A regression analysis did no reveal any reliable overall differences in BODY scores over the age range (see Table 5.4, “Exact age” row for the BODY domain).
The group differences in the previous section suggested that attributions of HEART should decrease with age. I did not observe evidence of this within this sample of children. As in the BODY domain, HEART scores were generally higher among children who assessed one of the animate target characters than among those who assessed one of the inanimate target characters (see Table 5.4, “Animate characters vs. GM” row for the HEART domain), but there were no reliable age-related changes in children’s HEART scores (see Table 5.4, “Exact age” and “Interaction” rows for the HEART domain,, and Figure 5.5, panel B, center plot). Visual inspection of Figure 5.5, panel A, suggests that this may reflect variability across specific target characters: For some characters (most notably, the robot) attributions of HEART appeared to increase over this age range (4-9y), while for other characters (most notably, the beetle, the doll, and the computer) attributions appeared to decrease; for many of the target characters included in this study there appeared to be no systematic age-related differences in attributions of HEART.
Finally, in line with the group differences in the previous section, MIND scores generally increased with age (see Table 5.4, “Exact age” row for the MIND domain). As in the BODY and MIND domains, MIND scores were generally higher among children who assessed one of the animate target characters than among those who assessed one of the inanimate target characters (see Table 5.4, “Beetle vs. GM” row for the MIND domain)—but although group differences suggested that this difference should increase with age, there was no evidence for this interaction among children (see Table 5.4, “Interaction” row for the MIND domain, and Figure 5.5, panel B, rightmost plot). However, visual inspection of Figure 5.5, panel A, suggests that there were two target characters for whom attributions of MIND did NOT increase with age: namely, the two inert toys (the teddy bear and the doll). Interestingly, this plot suggests that the two technologies (the robot and the computer) appear to be among the characters for whom age-related changes in attributions of MIND may have been most dramatic—but this general trend of increasing attributions of MIND also appears to have applied to all of the animate characters.
Discussion
As in Study 2, adults in Study 3 distinguished very strongly between animate beings (the elephant, goat, mouse, bird, and beetle) vs. inanimate objects (the teddy bear, doll, robot, and computer) in terms of their capacities in the BODY domain: They were nearly unanimous in their denial of physiological sensations to inanimate objects, while all of the animate beings were granted a fairly high degree of BODY abilities (on average). Likewise, in the HEART domain, adults were nearly unanimous in their denial of social-emotional abilities to inanimate objects, while animate beings were perceived to vary in their HEART abilities. Finally, echoing Study 1, adults did not outright deny the possibility that some inanimate objects could have a fair degree of perceptual-cognitive abilities—but they did grant relatively more MIND abilities to animate beings.
Study 3 aligned with Study 2 in providing further evidence for a robust distinction between animates vs. inanimates in the BODY domain among 7- to 9-year-old children, and extended this distinction back to younger (4- to 6-year-old children). As in Study 2, however, this distinction appears to have increased with age within this sample of children—in this case, driven both by decreases in BODY scores for inanimate objects (as in Study 2) and by increases in BODY scores for animate beings.
Again echoing Study 2, the biggest differences between children and adults in Study 3 were in the HEART domain. In this case, it was children’s attributions of social-emotional abilities to inanimate objects—and in particular, the robot—that marked them as different from adulst in this study. Interestingly, this difference between “snapshots” of older and younger children vs. adults was not reflected in age-related differences within the child sample: If anything, HEART scores among the relatively small sample of children (n = 25) who assessed the robot appeared to have increased with age (see Figure 5.5, panel A, center plot). Together with the results of Study 2, this provides some intriguing evidence that children (at least children in the San Francisco Bay Area) may have qualitatively different beliefs than adults about the possibility of social-emotional abilities in robots, perhaps reflecting cohort differences as well as any developmental changes. (I return this this possibility in Chapter VI [XX CHECK THAT THIS IS TRUE].)
Finally, in contrast to Study 2, Study 3 also suggested substantial ongoing development in children’s attributions of MIND, characterized by dramatic increases in MIND scores with age. Like adults in this study (and like adults and 7- to 9-year-old children in Study 2), children of all ages seemed to be willing to attribute a fair degree of perceptual-cognitive abilities to inaniamte beings. Age-related differences were driven not only by increases in these attributions (which run counter-typical to the broadest or bluntest version of a general “animate-inaniamte” distinction), but also by increases in attributions of MIND to animate beings (see Figure 5.5).
Study 4: A focus on early childhood (4-5y)
Study 4 builds on Study 3 by providing a targeted investigation of representations of mental life in the preschool years (4-5y). In this chapter, I again focus on what this study can reveal about attributions of BODY, HEART, and MIND at the earliest point in development that I have examined so far, and compare the deployment of this concept among young children vs. adults.
To review, in Study 4, 104 US adults and 43 US children between the ages of 4.02-5.59 years (median: 4.73y) each assessed two target characters on 18 mental capacities, with all aspects of the experimental design tailored to be appropriate for this youngest age group. This study employed the “edge case” variant of the general approach, with participants assessing both a beetle or a robot in sequence (with order counterbalanced across participants). (See Chapter II for detailed methods.)
Special notes on data processing and analysis
As in Studies 2 and 3, to facilitate comparison between children and adults in Study 4, I use adults’ BODY, HEART, and MIND scales (as described in Chapter IV) to analyze both age groups. For analyses using scales derived from EFA of children’s own responses, see [XX APPENDIX C?].
Results
Children vs. adults
See Figure 5.6, panel A, for BODY, HEART, and MIND scores for both target characters among the 4- to 5-year-old children and adults in Study 4. On the whole, participants’ assessments of these two “edge cases” in Study 4 were similar to those of adults’ and 7- to 9-year-old children in Study 2.
As in Study 2, in the aggregate, both children and adults seem to have considered the beetle (the animate character) to be a being with a moderately high degree of physiological sensations (mean BODY score among adults: 0.77, 95% CI: [0.72-0.82]; among children: 0.73, 95% CI: [0.66-0.80]) and perceptual-cognitive capacities (mean MIND score among adults: 0.61, 95% CI: [0.55-0.66]; among children: 0.56, 95% CI: [0.47-0.65]). Adults granted relatively little in the way of social-emotional abilities to the beetle (mean HEART score among adults: 0.23, 95% CI: [0.16-0.29]), but—with the older children in Study 2—children’s HEART scores tended to hover around the midpoint of the scale (mean: 0.46, 95% CI: [0.38-0.55]).
For the robot (the inanimate character) both adults and children, in the aggregate, indicated a moderate degree of perceptual-cognitive abilities (mean MIND score among adults: 0.62, 95% CI: [0.56-0.68]; among children: 0.55, 95% CI: [0.47-0.64]), and appeared to agree that the robot had less in the way of physiological sensations and social-emotional abilities than the beetle. However, echoing the results of Study 2, the two age groups appear to have diverged in their assessments of the absolute degree of BODY and HEART that they were willing to grant the robot: Adults granted very little in either domain (mean BODY score: 0.05, 95% CI: [0.03-0.07]; mean HEART score: 0.05, 95% CI: [0.02-0.08]), while children granted middling abilities in both domains (mean BODY score: 0.36, 95% CI: [0.27-0.44]; mean HEART score: 0.43, 95% CI: [0.34-0.52]).

Table 5.5: Regression analyses of age-related differences in BODY, HEART, and MIND scores among the 4- to 5-year-old children in Study 4 (scored using adults' scales, as presented in Chapter IV). For each conceptual unit, the table presents a Bayesian regression with 4 fixed effect parameters: (1) the intercept, which is an index of attributions of that conceptual unit among adults; (2) the overall difference in scores for the beetle compared to the grand mean ('GM') among adults; (3) the difference between children's and adults' scores, collapsing across target characters; and (4) the interactive effect of age group and target character. Age effects are highlighted in bold, because they are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
|
BODY |
HEART |
MIND |
| Parameter |
b |
95% CI |
|
b |
95% CI |
|
b |
95% CI |
|
| Intercept (adults) |
0.41 |
[ 0.38, 0.44] |
* |
0.14 |
[ 0.10, 0.17] |
* |
0.61 |
[ 0.57, 0.65] |
* |
| Beetle vs. GM (adults) |
0.36 |
[ 0.33, 0.39] |
* |
0.09 |
[ 0.05, 0.12] |
* |
-0.01 |
[-0.05, 0.03] |
|
| Children vs. adults |
0.13 |
[ 0.08, 0.19] |
* |
0.31 |
[ 0.24, 0.38] |
* |
-0.06 |
[-0.14, 0.01] |
|
| Interaction |
-0.18 |
[-0.23, -0.12] |
* |
-0.07 |
[-0.14, 0.00] |
* |
0.01 |
[-0.06, 0.08] |
|
A series of Bayesian regression analyses confirmed these overall impressions, yielding remarkably similar results to the parallel comparison between 7- to 9-year-old children and adults in Study 2.
As in Study 2, children’s BODY scores were generally higher than adults’ (see Table 5.5, “Children vs. adults” row for the BODY domain). This appears to have been particularly true for the robot (see Figure 5.6, top row); as a result, the difference between the beetle and the robot was attenuated among children, relative to adults (see Table 5.5, “Interaction” row for the BODY domain). Again, as in Study 2, children’s HEART scores were also higher than adults’ (see Table 5.5, “Children vs. adults” row for the HEART domain, and Figure 5.6, middle row). In Study 4, this difference between children and adults was slightly more pronounced for the robot than the beetle (see Table 5.5, “Interaction” row for the BODY domain). And yet again, as in Study 2, there were no substantial differences between children and adults in their MIND scores (see Table 5.5 and Figure 5.6, bottom row)
Discussion
Adults’ attributions of BODY, HEART, and MIND to the two “edge cases” included in Study 4 were very similar to their attributions in Study 2. As in previous studies, the difference between animates vs. inanimates was dramatic in the BODY domain, smaller in the HEART domain, and in this case non-existent in the MIND domain.
Study 4 aligned with Study 3 in providing evidence for a distinction between animate vs. inanimate characters in BODY attributions within the youngest sample tested in these studies (4- to 5-year-old children). As in previous studies, this distinction appears to have increased with age—but in contrast to previous studies, this appears to have been driven primarimly by increases in BODY scores for the animate character (the beetle).
Like children in Studies 2 and 3, the 4- to 5-year-old children in this study generally attributed greater social-emotional abilities (HEART) to these characters, relative to adults. Finally, like the 7- to 9-year-old children in Study 2 (who also assessed these “edge cases”), the 4- to 5-year-old children demonstrated rather adult-like attributions in the MIND domain. The lack of age-related differences within the child sample in the domains of HEART and MIND should be interpreted with some caution, given the smaller sample size and more limited age range of children in Study 4 compared to Studies 2 and 3.
General discussion
Table 5.7: Summary statistics for BODY, HEART, and MIND scores in Studies 2-4, organized by the age group of participants and the animacy status of target characters.
|
BODY |
HEART |
MIND |
Correlations (Pearson's r) |
| Animacy status |
Age group |
mean |
sd |
mean |
sd |
mean |
sd |
BODY vs. HEART |
BODY vs. MIND |
HEART vs. MIND |
| Study 2 |
| animate |
Adults |
0.22 |
0.27 |
-0.33 |
0.27 |
0.19 |
0.24 |
0.38 |
0.69 |
0.42 |
| Children, 7-9y |
0.32 |
0.17 |
0.08 |
0.33 |
0.20 |
0.18 |
0.28 |
0.38 |
0.20 |
| inanimate |
Adults |
-0.40 |
0.16 |
-0.44 |
0.17 |
0.32 |
0.24 |
0.69 |
0.23 |
0.09 |
| Children, 7-9y |
-0.15 |
0.25 |
0.01 |
0.34 |
0.30 |
0.20 |
0.53 |
0.26 |
0.19 |
| Study 3 |
| animate |
Adults |
0.41 |
0.14 |
-0.08 |
0.33 |
0.34 |
0.18 |
0.29 |
0.68 |
0.46 |
| Children, 7-9y |
0.34 |
0.15 |
0.04 |
0.28 |
0.16 |
0.24 |
0.39 |
0.36 |
0.16 |
| Children, 4-6y |
0.23 |
0.23 |
0.07 |
0.28 |
0.00 |
0.27 |
0.54 |
0.46 |
0.38 |
| inanimate |
Adults |
-0.46 |
0.12 |
-0.47 |
0.13 |
-0.17 |
0.36 |
0.89 |
0.20 |
0.01 |
| Children, 7-9y |
-0.31 |
0.20 |
-0.23 |
0.33 |
-0.03 |
0.35 |
0.65 |
0.29 |
0.23 |
| Children, 4-6y |
-0.21 |
0.32 |
-0.18 |
0.31 |
-0.16 |
0.35 |
0.80 |
0.59 |
0.69 |
| Study 4 |
| animate |
Adults |
0.27 |
0.28 |
-0.27 |
0.32 |
0.11 |
0.29 |
0.42 |
0.75 |
0.58 |
| Children, 4-6y |
0.23 |
0.24 |
-0.04 |
0.29 |
0.06 |
0.30 |
0.30 |
0.44 |
0.51 |
| inanimate |
Adults |
-0.45 |
0.10 |
-0.45 |
0.14 |
0.12 |
0.31 |
0.63 |
0.24 |
0.23 |
| Children, 4-6y |
-0.14 |
0.29 |
-0.07 |
0.29 |
0.05 |
0.28 |
0.57 |
0.55 |
0.57 |
In this chapter, I focused on a third aspect of the development of conceptual representations of mental life: the deployment of these representations in assessments of particular beings in the world. I focused in particular on analyses that might bring to light how representations of mental life interact with distinctions between animate beings vs. inanimate objects.
An adult endpoint
Taken together, these studies shed new light on the role of attributions of mental life in adults’ distinction between animate beings and inanimate objects. These findings are perhaps easiest to understand in terms of the visualizations of BODY, HEART, and MIND scores for animate vs. inanimate characters presented in Figures 5.8 and 5.9.

Table 5.8: Regression analysis of distinctions between animate vs. inanimate target characters in attributions of BODY, HEART, and MIND among US adults, 7- to 9-year-old children, and 4- to 6-year-old children in Studies 2-4. In terms of fixed effects, this Bayesian regression included all main effects and interactions between factor (dummy-coded for comparisons to the BODY domain as a baseline), age group (dummy-coded for comparisons to adults as a baseline), and animacy status (effect-coded for comparisons of animate characters to the grand mean collapsing across characters). The animate-inanimate comparisons (including interactions with age group) are highlighted in bold, because these are the primary parameters of interest for these analyses. For each parameter, the table includes the estimate (b) and a 95% credible interval for that estimate. Asterisks indicate 95% credible intervals that do not include 0.
| Parameter |
b |
95% CI |
|
| BODY |
| BODY, among adults (intercept) |
-0.09 |
[-0.29, 0.18] |
|
| BODY, older children (7-9y) vs. adults (main effect) |
0.13 |
[ 0.09, 0.17] |
* |
| BODY, younger children (4-6y) vs. adults (main effect) |
0.12 |
[ 0.08, 0.17] |
* |
| BODY, animates vs. inanimates, among adults (main effect) |
0.45 |
[ 0.38, 0.52] |
* |
| BODY, animates vs. inanimates, older children vs. adults (2-way interaction) |
-0.11 |
[-0.14, -0.07] |
* |
| BODY, animates vs. inanimates, younger children vs. adults (2-way interaction) |
-0.19 |
[-0.23, -0.15] |
* |
| HEART |
| HEART vs. BODY, among adults (main effect) |
-0.27 |
[-0.30, -0.25] |
* |
| HEART vs. BODY, older children (7-9y) vs. adults (2-way interaction) |
0.21 |
[ 0.17, 0.25] |
* |
| HEART vs. BODY, younger children (4-6y) vs. adults (2-way interaction) |
0.20 |
[ 0.15, 0.24] |
* |
| HEART vs. BODY, animates vs. inanimates, among adults (2-way interaction) |
-0.26 |
[-0.28, -0.23] |
* |
| HEART vs. BODY, animates vs. inanimates, older children vs. adults (3-way interaction) |
0.05 |
[ 0.01, 0.10] |
* |
| HEART vs. BODY, animates vs. inanimates, younger children vs. adults (3-way interaction) |
0.13 |
[ 0.09, 0.18] |
* |
| MIND |
| MIND vs. BODY, among adults (main effect) |
0.24 |
[ 0.22, 0.27] |
* |
| MIND vs. BODY, older children (7-9y) vs. adults (2-way interaction) |
-0.12 |
[-0.16, -0.08] |
* |
| MIND vs. BODY, younger children (4-6y) vs. adults (2-way interaction) |
-0.29 |
[-0.34, -0.24] |
* |
| MIND vs. BODY, animates vs. inanimates, among adults (2-way interaction) |
-0.34 |
[-0.36, -0.31] |
* |
| MIND vs. BODY, animates vs. inanimates, older children vs. adults (3-way interaction) |
0.06 |
[ 0.02, 0.11] |
* |
| MIND vs. BODY, animates vs. inanimates, younger children vs. adults (3-way interaction) |
0.17 |
[ 0.13, 0.22] |
* |
First, in the aggregate, the largest and most robust animate-inanimate distinctions among adults in these studies were in the BODY domain, for which the difference between animate vs. inanimate characters spanned at least half of the 0-1 scale across all of the studies included in this dissertation (see Figure 5.8, top row). A regression analysis confirmed that adult participants distinguished strongly between animate vs. inanimate characters in their BODY scores (see “BODY, among adults (intercept)” row in Table 5.8); collapsing across studies this distinction was still present, but substantially diminished, in the HEART and MIND domains (see “HEART vs. BODY, animates vs. inanimates, among adults (2-way interaction)” and “MIND vs. BODY, animates vs. inanimates, among adults (2-way interaction)” rows in Table 5.8). Visual inspection of Figure 5.8 (top row) suggests that the difference between animate and inanimate characters in BODY scores was quite consistent across studies, while differences in HEART and MIND scores varied rather dramatically. (See also the “Robot vs. GM” and “Animate characters vs. GM” rows in Tables 5.1, 5.3, and 5.5 for differences between animate vs. inanimate characters among adults each study separately.)

Beyond this, there appear to be have been differences between animate vs. inanimate characters in the variability of adults’ BODY, HEART, and MIND attributions. In each study, adults’ attributions of to animate beings varied widely along all three dimensions: BODY, HEART, and MIND (see Figure 5.8, top row, Figure 5.9, panel C, top row, and Table 5.7 for standard deviations across study, animacy status, and domain). This variability has several possible sources, including differences in opinions or beliefs across individual participants (especially relevant for attributions to the animate “edge case”—the beetle—in Studies 1a, 1b, 1c, 2, and 4), as well as differences in the (perceived) mental capacity profiles of different animate beings (especially relevant for attributions to the “diverse characters” featured in Study 1d and Study 3). Moreover, these attributions appear to have varied in tandem (see Table 5.7 and Figure 5.9). BODY and MIND scores for animate beings were particularly strongly correlated (Pearson’s r = 0.68-0.75 across Studies 2-4), and scores for each of these more “basic” conceptual units (per Chapter IV) were also correlated quite strongly with HEART scores (BODY vs. HEART: r = 0.29-0.42; MIND vs. HEART: r = 0.42-0.58). Indeed—to pick up on a thread from the General Discussion in Chapter IV—attributions of HEART to animate beings appear to have been jointly dependent on attributions of both BODY and MIND; see Figure 5.9, panel C, in which strong HEART scores are present only among participants who received strong BODY and MIND scores—i.e., reddish points are only present in the upper right corner of the plot (and see [XX APPENDIX C?] for relevant regression analyses).
Meanwhile, adults’ attributions to inanimate objects (Figure 5.9, panel C, bottom row) varied particularly strongly in the MIND domain, but seemingly less in the domains of BODY and HEART (see also Table 5.7). Among inanimate objects, BODY and HEART scores were particularly strongly correlated (Pearson’s r = 0.63-0.89 across Studies 2-4)—but high scores in either of these two domains were quite rare. Scores for the two more “basic” conceptual units (per Chapter IV), BODY and MIND, were only weakly correlated (Pearson’s r = 0.20-0.24 across Studies 2-4), and MIND and HEART scores were virtually independent (MIND vs. HEART: r = 0.01-0.23). (See [XX APPENDIX C?] for regression analyses exploring the possibility of joint dependency of HEART on BODY and MIND among inanimate objects.)
In sum, these studies suggest that—in addition to biological properties like having blood, digesting food, growing, reproducing, and dying [XX CITE GELMAN and others]—US adults distinguish animate beings from inanimate objects by their high degree of perceived physiological sensations (BODY)—and, to a lesser degree, their superior social-emotional abilities (HEART) and perceptual cognitive abilities (MIND). Above and beyond perceiving animates vs. inanimates to differ in their “average” mental capacities, adults in these studies also appeared to conceptualize animate beings as entities who vary quite dramatically in all three aspects of mental life, and for whom these different aspects of mental life may be closely related. In contrast, in this consensus view inanimate objects appear to be seen as entities that vary mostly in their perceptual-cognitive abilities (MIND), with consistently little of the physiological sensations or social-emotional abilities of the BODY and HEART.
A developmental trajectory
As among adults, the largest and most robust animate-inanimate distinctions among children in these studies were also in the BODY domain—but these distinctions were not quite as dramatic among children as they were among adults; see Figure 5.8, middle and bottom rows. The regression analysis reported in the previous section confirmed that the difference in BODY scores between animate vs. inanimate characters was smaller both among older children (7-9y) and particularly among younger children (4-6y) than it was among adults (see “BODY, animates vs. inanimates, older children vs. adults (2-way interaction)” and “BODY, animates vs. inanimates, younger children vs. adults (2-way interaction)” interactions in Table 5.8). Moreover, the differences in the strength of this distinction across domains were substantially attenuated, both among older children and particularly among younger children, as compared to adults (see “HEART vs. BODY, animates vs. inanimates, older children vs. adults (3-way interaction),” “HEART vs. BODY, animates vs. inanimates, younger children vs. adults (3-way interaction),” “MIND vs. BODY, animates vs. inanimates, older children vs. adults (3-way interaction),” and “MIND vs. BODY, animates vs. inanimates, younger children vs. adults (3-way interaction)” rows in Table 5.8). (See also the “Interaction” rows in Tables 5.1, 5.3, and 5.5 for differences in the size of the distinction between animate vs. inanimate characters among chidlren vs. adults each study separately: This varied by age group in all three studies in the BODY domain, and in one of three studies for both the HEART and MIND domains.)
In terms of variability, both older children (7-9y) and younger children (4-6y) appear, if anything, to have demonstrated the reverse pattern to that of adults: BODY scores appear to have been more variable for inanimate than animate characters, and HEART and MIND scores appear to have been roughly equally variable for animate and inanimate characters among children. Moreover, covariance relationships among these three aspects of mental life appeared to be no clearer or stronger among animates than they were among inanimates. In my view, there were no clear indications of substantial development between early and middle childhood in these aspects of the deployment of conceptual representations of mental life, suggesting that this kind of fine tuning might be ongoing well into middle childhood—perhaps into adolesence or beyond. (See Table 5.7 for all standard deviations and correlations.)
In sum, while I characterized adults as conceptualizing animate beings as entities who vary more dramatically in their BODY and HEART capacities than inanimate objects (and for whom all three aspects of mental life are more closely related), I do not consider Studies 2-4 to offer strong evidence that differences in perceived variability in mental capacities or differences in perceived relationships among different aspects of mental life are important parts of children’s animate-inanimate distinction. Instead, these studies suggest that the primary role of attributions of mental life in 4- to 9-year-old children’s attributions of mental life seems to be governing their “average” attributions of physiological sensations (BODY)—and to a lesser degree, social-emotional (HEART) and perceptual cognitive abilities (MIND)—to various entities in their world.
Chapter conclusion
In this chapter, I explored a third aspect of conceptual representations of mental life among US children and adults: The deployment of these representations in reasoning about particular entities in the world. I focused in particular on the role of the classic distinction between “animate beings” (primarily, humans and other biological animals) and “inanimate objects” (in this case, technologies as well as inert objects) in attributions of BODY, HEART, and MIND (the three aspects of mental life that seem to anchor adults’ and older children’s conceptual representations in this domain, as described in Chapter III).
These studies are consistent with the following theory: By the preschool years, US children’s animate-inanimate distinction includes an awareness that animate beings are more likely than inanimate objects to have physiological sensations like hunger, pain, and fatigue (what I have called BODY). This continues to be the primary axis of the distinction between the mental lives of animates vs. inanimtes throughout development, increasing in size and reliability over early and middle childhood (and perhaps beyond); ultimately, US adults perceive the BODY domain to be the site of the most dramatic and robust differences in the mental lives of animate beings vs. inanimate objects. At all ages, animates and inanimates are also perceived to differ in their social-emotional abilities (HEART) and perceptual-cognitive capacities (MIND), but among children as well as adults these differences are smaller and more variable across the particular beings in mind. Finally, at some point in later childhood or adolesence, US children come to acquire adults’ intuition that animate beings are distinct from inanimate objects not only in that their mental capacities are, on average, superior (especially in the BODY domain)—but also in that their mental capacities are more variable across specific entities and more correlated across domains (BODY, HEART, and MIND). These nuances—which might be characterized as “over-hypotheses” about the mental lives of animates vs. inanimates [XX CITE]—appear to emerge at a later point in the development.
As in previous chapters, this is not the only possible interpretation of the pattern of results presented here; I have intentionally stated these hypotheses in their strongest form, to facilitate confirmatory tests in future research. The primary role of the studies and analyses discussed here has been to inspire the hypothesis stated in the previous paragraph and to the foundation for these future studies.
This marks the end of my exploration of the large, rich datasets emerging from Studies 1-4. In the next and final chapter, I step back to reflect on what these three “passes” at analysis have revealed about conceptual development in this domain, how these three aspects of conceptual development (conceptual units, relational organization, and deployment) might be related to one other, and what this case study of representations of mental life might reveal about conceptual development more broadly.
LS0tCnRpdGxlOiAiQ2hhcHRlciBWOiBDaGFuZ2VzIGluIGRlcGxveW1lbnQgb2YgdGhlIGNvbmNlcHQiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgdG9jX2Zsb2F0OiB5ZXMKYWx3YXlzX2FsbG93X2h0bWw6IHllcwotLS0KCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQojICMgZm9yIGtuaXR0aW5nIHRvIC5kb2N4CiMgb3V0cHV0OgojICAgd29yZF9kb2N1bWVudDoKIyAgICAgcmVmZXJlbmNlX2RvY3g6ICIuL3dvcmQtc3R5bGVzLXJlZmVyZW5jZS5kb2N4IgojIGFsd2F5c19hbGxvd19odG1sOiB5ZXMKCiMgIyBmb3Iga25pdHRpbmcgdG8gLm5iLmh0bWwgCiMgb3V0cHV0OgojICAgaHRtbF9ub3RlYm9vazoKIyAgICAgdG9jOiB5ZXMKIyAgICAgdG9jX2RlcHRoOiA0CiMgICAgIHRvY19mbG9hdDogeWVzCmBgYAoKYGBge3J9CiMgcnVuIHVyLXNldHVwIHNjcmlwdCAod2hpY2ggcnVucyBvdGhlciBzY3JpcHRzKQpzb3VyY2UoIi4vc2NyaXB0cy9fU0VUVVAuUiIpCgojIGxvYWQgaW4gRUZBcyAmIG5hbWVzIGZyb20gQ2hhcHRlcnMgSUlJICYgSVYKc291cmNlKCIuL3NjcmlwdHMvc3RvcmVkX2NoMDMuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL3N0b3JlZF9jaDA0LlIiKQpgYGAKCgojIENoYXB0ZXIgb3ZlcnZpZXcKCkluIHRoaXMgY2hhcHRlciwgSSBmb2N1cyBvbiB0aGUgdGhpcmQgb2YgbXkgdGhyZWUga2V5IHF1ZXN0aW9ucyBhYm91dCB0aGUgZGV2ZWxvcG1lbnQgb2YgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlOiBfSG93wqBkbyBwZW9wbGUgb2YgZGlmZmVyZW50IGFnZXMgZGVwbG95IHRoZWlyIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIHRvIHJlYXNvbiBhYm91dCBzcGVjaWZpYyBlbnRpdGllcyBpbiB0aGUgd29ybGQ/XyBFdmVuIG1vcmUgdGhhbiBvdGhlciBjaGFwdGVycywgdGhpcyBxdWVzdGlvbiBjb21lcyB0byBsaWZlIG1vc3Qgdml2aWRseSBpbiB0aGUgY29udGV4dCBvZiBkZXZlbG9wbWVudGFsIGNvbXBhcmlzaW9uczsgdGhlcmVmb3JlIEkgZHJhdyBwcmltYXJpbHkgb24gZGF0YSBmcm9tIFN0dWRpZXMgMi00LCB3aGljaCBpbmNsdWRlZCBib3RoIGFkdWx0IGFuZCBjaGlsZCBzYW1wbGVzOyBzZWUgW1hYIEFQUEVORElYIEM/XSBmb3IgbW9yZSBvbiBhZHVsdHMnIHJlc3BvbnNlcyBpbiBTdHVkaWVzIDFhLTFkLiBGb3IgZGV0YWlscyBhYm91dCB0aGUgbWV0aG9kcyBvZiBhbGwgc3R1ZGllcywgc2VlIENoYXB0ZXIgSUkuIFRoZSBnb2FsIG9mIHRoaXMgY2hhcHRlciBpcyB0byBwcm92aWRlICJzbmFwc2hvdHMiIG9mIG1lbnRhbCBjYXBhY2l0eSBhdHRyaWJ1dGlvbnMgdG8gdmFyaW91cyB0YXJnZXQgY2hhcmFjdGVycyBpbiBlYXJseSBjaGlsZGhvb2QsIG1pZGRsZSBjaGlsZGhvb2QsIGFuZCBhZHVsdGhvb2QsIGFuZCB0byBleHBsb3JlIGluIGZpbmVyLWdyYWluZWQgZGV0YWlsIG1vcmUgY29udGludW91cyBjaGFuZ2VzIGluIGNoaWxkcmVuJ3MgYmVsaWVmcyBhYm91dCB0aGUgbWVudGFsIGxpdmVzIG9mIHRoZXNlIGNoYXJhY3RlcnMgYmV0d2VlbiA0LTl5IG9mIGFnZS4KClRvIHN0cnVjdHVyZSB0aGlzIGV4cGxvcmF0aW9uLCBJIGZvY3VzIGluIHBhcnRpY3VsYXIgdG8gYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgaW4gY2hpbGRyZW4ncyBhbmQgYWR1bHRzIGFzc2Vzc21lbnRzIG9mIGFuaW1hdGUgYmVpbmdzIHZzLiBpbmFuaW1hdGUgYmVpbmdzLiBBcyBkaXNjdXNzZWQgaW4gQ2hhcHRlciBJIFtYWCBDSEVDSyBUSEFUIFRISVMgSVMgVFJVRV0sIHRoZSBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiBoYXMgYmVlbiB0aGUgdG9waWMgb2YgZXh0ZW5zaXZlIGVtcGlyaWNhbCBhbmQgdGhlb3JldGljYWwgaW4gYm90aCBjb2duaXRpdmUgYW5kIGRldmVsb3BtZW50YWwgcHN5Y2hvbG9neSwgZXh0ZW5kaW5nIGJhY2sgYXQgbGVhc3QgYXMgZmFyIGFzIFBpYWdldCBbWFggQ0lURV0sIHdpdGggcm9vdHMgaW4gc29tZSBvZiB0aGUgZWFybGllc3QgZGlzY3Vzc2lvbnMgb2YgbWVudGFsIGxpZmUgaW4gdGhlIFdlc3Rlcm4gdHJhZGl0aW9uIFtYWCBDSVRFIFBMQVRPLCBBUklTVE9UTEVdLiBJbiB0aGUgcGFzdCBmZXcgZGVjYWRlcywgZW1waXJpY2FsIHdvcmsgb24gdGhlIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uIGhhcyBmb2N1c2VkIGluIHBhcnRpY3VsYXIgb24gZGlmZmVyZW5jZXMgYmV0d2VlbiBhbmltYXRlcyB2cy4gaW5hbmltYXRlcyBpbiB0aGVpciBiZWhhdmlvcnMgKGUuZy4sIHRoZWlyIGFiaWxpdHkgdG8gZW5nYWdlIGluIHNlbGYtcHJvcGVsbGVkIG1vdmVtZW50cyBbWFggQ0lURSBSIEdFTE1BTl0gb3IgdG8gZWZmZWN0IGNhdXNhbCBjaGFuZ2VzIGluIHRoZSB3b3JsZCBbWFggQ0lURSBTUEVMS0VdKSwgdGhlaXIgb2JzZXJ2YWJsZSBwcm9wZXJpdGVzIChlLmcuLCBoYXZpbmcgZXllcyBhbmQgZmFjZXMsIGNvbnRhaW5pbmcgYmxvb2QsIGhhdmluZyBvcmdhbnMgb24gdGhlIGluc2lkZSBbWFggQ0lURSBTIEdFTE1BTiAmIE9QRkVSXSksIGFuZCB0aGUgYmlvbG9naWNhbCBwcm9jZXNzZXMgdGhhdCB0aGV5IGVuZ2FnZSBpbiBvciBhcmUgc3ViamVjdGVkIHRvIChlLmcuLCBncm93dGgsIHJlcHJvZHVjdGlvbiwgZGVhdGggW1hYIENJVEUgUyBHRUxNQU4gJiBPUEZFUl0pLiBTb21lIHN0dWRpZXMgaGF2ZSBhbHNvIGV4cGxvcmVkIGNoaWxkcmVuJ3MgZGV2ZWxvcGluZyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtaW5kcyBvZiBhbmltYXRlIGJlaW5nc+KAlGJ1dCBub3Qgd2l0aCB0aGUgc3RydWN0dXJlIHByb3ZpZGVkIGJ5IHRoZSBjdXJyZW50IGFuYWx5c2lzIG9mIG5hdHVyYWxseSBvY2N1cnJpbmcgImNvbmNlcHR1YWwgdW5pdHMuIiBJbiB0aGlzIGNoYXB0ZXIsIEkgYWltIHRvIHB1c2ggdGhpcyBhc3BlY3Qgb2YgdGhlIGZpZWxkJ3MgdW5kZXJzdGFuZGluZyBvZiB0aGUgYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24gZm9yd2FyZCBieSBwcm92aWRpbmcgYSBzdHJ1Y3R1cmVkIGFuYWx5c2lzIG9mIGF0dHJpYnV0aW9ucyBvZiBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgKEJPRFkpLCBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyAoSEVBUlQpLCBhbmQgcGVyY2VwdHVhbC1jb2duaXRpdmUgY2FwYWNpdGllcyAoTUlORCkgdG8gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGJlaW5ncyBpbiBsYXJnZSBzYW1wbGVzIG9mIDQtIHRvIDkteWVhci1vbGQgVVMgY2hpbGRyZW4gYW5kIGFkdWx0cy4KCgojIEdlbmVyYWwgYW5hbHlzaXMgcGxhbgoKIyMgSGlnaC1sZXZlbCBvdmVydmlldwoKSW4gYW5hbHl6aW5nIHRoZXNlIGRhdGFzZXRzIHdpdGggYW4gZXllIHRvd2FyZCBkb2N1bWVudGluZyB0aGUgYXBwbGljYXRpb24gb3IgZGVwbG95bWVudCBvZiB0aGUgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgZGVzY3JpYmVkIGluIENoYXB0ZXJzIElJSS1JViwgdGhlIGJhc2ljIGluc2lnaHQgaXMgdGhhdCB0aGUgYXR0cmlidXRpb24gb2Ygc3BlY2lmaWMgbWVudGFsIGNhcGFjaXRpZXMgdG8gc3BlY2lmaWMgdGFyZ2V0IGNoYXJhY3RlcnMgcHJvdmlkZXMgZXZpZGVuY2Ugb2YgaG93IGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGFyZSBkZXBsb3llZCBpbiBldmVyeWRheSBzb2NpYWwgY29nbml0aW9uLiBJbiBDaGFwdGVyIElJLCBJIGlsbHVzdHJhdGVkIHRoaXMgd2l0aCB0aGUgZm9sbG93aW5nIGV4YW1wbGU6IElmIHBhcnRpY2lwYW50cyB3aG8gYXNzZXNzIHRoZSBtZW50YWwgY2FwYWNpdGllcyBvZiBDaGFyYWN0ZXJzIDEsIDIsIGFuZCAzIHNoYXJlIG9uZSBnZW5lcmFsIHBhdHRlcm4gb2YgbWVudGFsIGNhcGFjaXR5IGF0dHJpYnV0aW9ucywgYW5kIHBhcnRpY2lwYW50cyB3aG8gYXNzZXNzIHRoZSBtZW50YWwgY2FwYWNpdGllcyBvZiBDaGFyYWN0ZXJzIDQsIDUsIGFuZCA2IHNoYXJlIGFub3RoZXIgcGF0dGVybiwgdGhpcyBwcm92aWRlcyBzb21lIGV2aWRlbmNlIHRoYXQgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgbWlnaHQgcGxheSBhIHJvbGUgaW4gc3RydWN0dXJpbmcgcmVwcmVzZW50YXRpb25zIG9mIChhbmQgaW50ZXJhY3Rpb25zIHdpdGgpIGRpZmZlcmVudCBjbGFzc2VzIG9mIGJlaW5ncyBpbiB0aGUgd29ybGQuIEhlcmUgSSB3aWxsIHRyYW5zbGF0ZSB0aGlzIGdlbmVyYWwgaW50dWl0aW9uIGludG8gYSBzcGVjaWZpYyBhbmFseXNpcyBwbGFuIHRvIGJlIGFwcGxpZWQgdG8gZWFjaCBvZiB0aGVzZSBkYXRhc2V0cyBpbiB0dXJuLiAKCiMjIERldGFpbHMgb2YgYW5hbHlzZXMKCmBgYHtyfQphbmltX2xvb2t1cCA8LSBkYXRhLmZyYW1lKGNoYXJhY3RlciA9IGxldmVscyhzY29yZXNfYWxsJGNoYXJhY3RlcikpICU+JQogIG11dGF0ZShhbmltX2luYW4gPSBjYXNlX3doZW4oCiAgICBjaGFyYWN0ZXIgJWluJSBjKCJhZHVsdCIsICJjaGlsZCIsICJpbmZhbnQiLCAKICAgICAgICAgICAgICAgICAgICAgInBlcnNvbiBpbiBhIHBlcnNpc3RlbnQgdmVnZXRhdGl2ZSBzdGF0ZSIsIAogICAgICAgICAgICAgICAgICAgICAicGVyc29uIGluIGEgUFZTIiwgImZldHVzIiwgImNoaW1wYW56ZWUiLCAKICAgICAgICAgICAgICAgICAgICAgImVsZXBoYW50IiwgImRvbHBoaW4iLCAiYmVhciIsICJkb2ciLCAiZ29hdCIsIAogICAgICAgICAgICAgICAgICAgICAibW91c2UiLCAiZnJvZyIsICJibHVlIGpheSIsICJiaXJkIiwgImZpc2giLCAKICAgICAgICAgICAgICAgICAgICAgImJlZXRsZSIsICJtaWNyb2JlIikgfiAiYW5pbWF0ZSIsCiAgICBjaGFyYWN0ZXIgJWluJSBjKCJyb2JvdCIsICJjb21wdXRlciIsICJjYXIiLCAidGVkZHkgYmVhciIsIAogICAgICAgICAgICAgICAgICAgICAiZG9sbCIsICJzdGFwbGVyIikgfiAiaW5hbmltYXRlIiwKICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSwKICAgIGFuaW1faW5hbiA9IGZhY3RvcihhbmltX2luYW4sIGxldmVscyA9IGMoImFuaW1hdGUiLCAiaW5hbmltYXRlIikpKQpgYGAKCkFsbCBhbmFseXNlcyBpbiB0aGlzIGNoYXB0ZXIgbWFrZSB1c2Ugb2YgdGhlIF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyBzY2FsZXMgZGV2ZWxvcGVkIGluIENoYXB0ZXIgSVYgdG8gc3VtbWFyaXplIHBhcnRpY2lwYW50cycgcmVzcG9uZXMgaW4gdGVybXMgb2YgdGhlIGNvbmNlcHR1YWwgdW5pdHMgaWRlbnRpZmllZCBhbW9uZyBhZHVsdHMgaW4gZWFjaCBzdHVkeSAoYXMgcHJlc2VudGVkIGluIENoYXB0ZXIgSUlJKS4gCgpGb3IgZWFjaCBzdHVkeSwgSSBjb25kdWN0IHR3byBhbmFseXNlcyBvZiBzY29yZXMgZWFjaCBvZiB0aGVzZSB0aHJlZSBkb21haW5zIChCT0RZLCBIRUFSVCwgYW5kIE1JTkQpLCB2aWEgQmF5ZXNpYW4gcmVncmVzc2lvbnMuIEZpcnN0LCBJIGNvbXBhcmUgYWdlIGdyb3VwcyAoZS5nLiwgYWR1bHRzIHZzLiBjaGlsZHJlbiksIHdpdGggYW4gZXllIHRvd2FyZCBhc3Nlc3NpbmcgYm90aCBvdmVyYWxsIGRpZmZlcmVuY2VzIGJldHdlZW4gYWdlIGdyb3VwcyBhbmQgZGlmZmVyZW50aWFsIHNlbnNpdGl2aXR5IHRvIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGFuaW1hdGUgYmVpbmdzIHZzLiBpbmFuaW1hdGUgb2JqZWN0cyBpbiB0aGF0IGRvbWFpbi4gU2Vjb25kLCBJIGV4YW1pbmUgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgd2l0aGluIHRoZSBjaGlsZCBzYW1wbGVzLCBhZ2FpbiB3aXRoIGFuIGV5ZSB0b3dhcmQgYXNzZXNzaW5nIG92ZXJhbGwgaW5jcmVhc2VzIG9yIGRlY3JlYXNlcyBpbiBhdHRyaWJ1dGlvbnMgd2l0aCBpbmNyZWFzaW5nIGFnZSBhcyB3ZWxsIGFzIGluY3JlYXNlcyBvciBkZWNyZWFzZXMgaW4gY2hpbGRyZW4ncyBzZW5zaXRpdml0eSB0byB0aGUgYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24gaW4gdGhhdCBkb21haW4uIEZvciBhbGwgYW5hbHlzZXMsIEkgY29uZHVjdCBCYXllc2lhbiByZWdyZXNzaW9ucyBvbiByYXcgc2NvcmVzICh3aGljaCByYW5nZWQgZnJvbSAwLTEgZm9yIGVhY2ggZG9tYWluKSwgaW5jbHVkaW5nIG1heGltYWwgcmFuZG9tIGVmZmVjdHMgc3RydWN0dXJlcyAoY29udGluZ2VudCBvbiB0aGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbmNsdWRlZCBpbiB0aGUgc3R1ZHkgYW5kIHRoZSB3aXRoaW4tIHZzIGJldHdlZW4tc3ViamVjdHMgZGVzaWduIG9mIHRoZSBzdHVkeSkuCgpGb3IgdHdvIG9mIHRoZXNlIHN0dWRpZXPigJRTdHVkeSAyIGFuZCBTdHVkeSA0LCB3aGljaCBib3RoIGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGVtcGlyY2FsIGFwcHJvYWNo4oCUdGhlIGNvbXBhcmlzb24gYmV0d2VlbiAiYW5pbWF0ZSBiZWluZ3MiIGFuZCAiaW5hbmltYXRlIG9iamVjdHMiIGlzIHJlZHVuZGFudCB3aXRoIGEgZnVsbCBjb21wYXJpc29uIG9mIGFsbCB0YXJnZXQgY2hhcmFjdGVycyBpbmNsdWRlZCBpbiB0aGUgc3R1ZHkuIFRvIG1heGltaXplIGNvbXBhcmFiaWxpdHkgKGFuZCBtaW5pbWl6ZSB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5KSwgSSBoYXZlIGNob3NlbiB0byBhbmFseXplIFN0dWR5IDMgaW4gYSBzaW1pbGFyIHdheSwgbG9va2luZyBhdCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBncm91cHMgb2YgdGFyZ2V0IGNoYXJhY3RlcnMgKGZpdmUgYW5pbWF0ZSBiZWluZ3MgdnMuIDQgaW5hbmltYXRlIG9iamVjdHMpIHJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gYW5hbHl6ZSBhbGwgcG9zc2libGUgZGlmZmVyZW5jZXMgYW1vbmcgdGhlIG5pbmUgImRpdmVyc2UgY2hhcmFjdGVycyIgaW5jbHVkZWQgaW4gdGhhdCBzdHVkeS4KCkluIGFkZGl0aW9uIHRvIHRoZXNlIHN0dWR5LXNwZWNpZmljIGFuYWx5c2VzLCBJIGluY2x1ZGUgYm90aCB2aXN1YWwgYW5kIG51bWVyaWNhbCBzdW1tYXJpZXMgb2YgZmluZGluZ3MgYWNyb3NzIHN0dWRpZXMgYW5kIHNhbXBsZXMgaW4gdGhlIEdlbmVyYWwgRGlzY3Vzc2lvbiwgYXMgd2VsbCBhcyBhbiBhZGRpdGlvbiByZWdyZXNzaW9uIGFuYWx5c2lzIGFpbWVkIGF0IGNvbXBhcmluZyB0aGUgZGVncmVlIG9mIHRoZSBhbmltYXRlLWRpc3RpbmN0aW9uIGFjcm9zcyBkb21haW5zIChCT0RZLCBIRUFSVCwgYW5kIE1JTkQpIGFuZCBhZ2UgZ3JvdXBzIChhZHVsdHMsIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4sIGFuZCA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuKSwgcG9vbGluZyBkYXRhIGZyb20gU3R1ZGllcyAyLTQuIFRoaXMgYW5hbHlzaXMgYWdhaW4gaW5jbHVkZXMgYSBtYXhpbWFsIHJhbmRvbSBlZmZlY3RzIHN0cnVjdHVyZSAocmFuZG9tIGludGVyY2VwdHMgZm9yIHBhcnRpY2lwYW50cyBuZXN0ZWQgd2l0aGluIHN0dWRpZXMgYW5kIGZvciBzcGVjaWZpYyB0YXJnZXQgY2hhcmFjdGVycyk7IHJhdGhlciB0aGFuIGJlaW5nIGNvbmR1Y3RlZCBvdmVyIHJhdyBzY29yZXMgKHdoaWNoIHJhbmdlZCBmcm9tIDAtMSksIGl0IGlzIGNvbmR1Y3RlZCBvdmVyIGNlbnRlcmVkIHNjb3JlcyAoY2VudGVyZWQgdG8gcmFuZ2UgZnJvbSAtMC41IHRvICswLjUpLiBTZWUgVGFibGUgNS44LCBjYXB0aW9uLCBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBjb2Rpbmcgb2YgdGhlIHBhcmFtZXRlcnMgaW5jbHVkZWQgaW4gdGhpcyBhbmFseXNpcy4KCgojIFN0dWR5IDI6IENvbmNlcHR1YWwgY2hhbmdlIGJldHdlZW4gbWlkZGxlIGNoaWxkaG9vZCAoNy05eSkgYW5kIGFkdWx0aG9vZAoKSW4gdGhlIGNvbnRleHQgb2YgdGhpcyBkaXNzZXJ0YXRpb24sIFN0dWR5IDIgc2VydmVzIHRvIHByb3ZpZGUgYW4gaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIG9mIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSBlYXJsaWVyIGluIGRldmVsb3BtZW50LCBpbiB3aGF0IEkgaGF2ZSBjYWxsZWQgbWlkZGxlIGNoaWxkaG9vZCAoNy05eSkuIEluIHRoaXMgY2hhcHRlciwgSSBmb2N1cyBvbiB3aGF0IHRoaXMgc3R1ZHkgY2FuIHJldmVhbCBhYm91dCBjaGFuZ2VzIGluIHRoZSBkZXBsb3ltZW50IG9mIHRoaXMgY29uY2VwdCBiZXR3ZWVuIG1pZGRsZSBjaGlsZGhvb2QgYW5kIGFkdWx0aG9vZDogSG93IGRvIFVTIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGNvbXBhcmUgdG8gdGhvc2Ugb2YgYWR1bHRzIGluIHRoZWlyIGN1bHR1cmFsIGNvbnRleHQ/CgpUbyByZXZpZXcsIGluIFN0dWR5IDIsIGByIG5yb3coZDJfYWRfd2lkZSlgIFVTIGFkdWx0cyBhbmQgYHIgbnJvdyhkMl83OV93aWRlKWAgVVMgY2hpbGRyZW4gYmV0d2VlbiB0aGUgYWdlcyBvZiBgciBzdW1tYXJ5KGQyXzc5JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAtYHIgc3VtbWFyeShkMl83OSRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgIHllYXJzIChtZWRpYW46IGByIHN1bW1hcnkoZDJfNzkkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgeSkgZWFjaCBhc3Nlc3NlZCBhIHNpbmdsZSB0YXJnZXQgY2hhcmFjdGVyIG9uIDQwIG1lbnRhbCBjYXBhY2l0aWVzLiBUaGlzIHN0dWR5IGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCB3aXRoIHBhcnRpY2lwYW50cyByYW5kb21seSBhc3NpZ25lZCB0byBhc3Nlc3MgZWl0aGVyIGEgYmVldGxlIG9yIGEgcm9ib3QuIChTZWUgQ2hhcHRlciBJSSBmb3IgZGV0YWlsZWQgbWV0aG9kcy4pCgojIyBTcGVjaWFsIG5vdGVzIG9uIGRhdGEgcHJvY2Vzc2luZyBhbmQgYW5hbHlzaXMKClRvIGZhY2lsaXRhdGUgY29tcGFyaXNvbiBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMiwgSSB1c2UgYWR1bHRzJyBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NhbGVzIChhcyBkZXNjcmliZWQgaW4gQ2hhcHRlciBJVikgdG8gYW5hbHl6ZSBib3RoIGFnZSBncm91cHMuIEZvciBhbmFseXNlcyB1c2luZyBzY2FsZXMgZGVyaXZlZCBmcm9tIEVGQSBvZiBjaGlsZHJlbidzIG93biByZXNwb25zZXMsIHNlZSBbWFggQVBQRU5ESVggQz9dLgoKIyMgUmVzdWx0cwoKYGBge3J9CmQyXzc5YWRfc2NvcmVkX2FkIDwtIGZ1bGxfam9pbihkMl9hZF9zY29yZWRfYWQsIGQyXzc5X3Njb3JlZF9hZCkgJT4lCiAgbGVmdF9qb2luKGFuaW1fbG9va3VwKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGxldmVscyhkMl9hZF9zY29yZWRfYWQkY2hhcmFjdGVyKSksCiAgICAgICAgIGFnZV9ncm91cCA9IGZhY3RvcihhZ2VfZ3JvdXApKQoKY29udHJhc3RzKGQyXzc5YWRfc2NvcmVkX2FkJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9lZGdlCmNvbnRyYXN0cyhkMl83OWFkX3Njb3JlZF9hZCRmYWN0b3IpIDwtIGNvbnRyYXN0c19jbnQzX2ZhY3Rvcgpjb250cmFzdHMoZDJfNzlhZF9zY29yZWRfYWQkYW5pbV9pbmFuKSA8LSBjb250cmFzdHNfc3VtMl9hbmltCmNvbnRyYXN0cyhkMl83OWFkX3Njb3JlZF9hZCRhZ2VfZ3JvdXApIDwtIGNvbnRyYXN0c19kdW0yX2FnZWdwCmBgYAoKIyMjIENoaWxkcmVuIHZzLiBhZHVsdHMKCmBgYHtyfQpkMl83OWFkX21lYW5zIDwtIGQyXzc5YWRfc2NvcmVkX2FkICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNjb3JlIiwgbmEucm0gPSBUKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpTZWUgRmlndXJlIDUuMiwgcGFuZWwgQSwgZm9yIF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyBzY29yZXMgZm9yIGJvdGggdGFyZ2V0IGNoYXJhY3RlcnMgYW1vbmcgdGhlIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiBTdHVkeSAyLgoKSW4gdGhlIGFnZ3JlZ2F0ZSwgYm90aCBjaGlsZHJlbiBhbmQgYWR1bHRzIHNlZW0gdG8gaGF2ZSBjb25zaWRlcmVkIHRoZSBiZWV0bGXigJR0aGUgYW5pbWF0ZSAiZWRnZSBjYXNlIiBmZWF0dXJlZCBpbiB0aGlzIHN0dWR54oCUdG8gYmUgYSBiZWluZyB3aXRoIGEgbW9kZXJhdGVseSBoaWdoIGRlZ3JlZSBvZiBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgKG1lYW4gX0JPRFlfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIkJPRFkiLCAiYWR1bHRzIiwgImJlZXRsZSIpYDsgYW1vbmcgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNzkiLCAiYmVldGxlIilgKSBhbmQgcGVyY2VwdHVhbC1jb2duaXRpdmUgY2FwYWNpdGllcyAobWVhbiBfTUlORF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiTUlORCIsICJhZHVsdHMiLCAiYmVldGxlIilgOyBhbW9uZyBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIk1JTkQiLCAiY2hpbGRyZW43OSIsICJiZWV0bGUiKWApLiBIb3dldmVyLCBhZHVsdHMgYW5kIGNoaWxkcmVuIGFwcGVhciB0byBoYXZlIGRpdmVyZ2VkIGluIHRoZWlyIGFzc2Vzc21lbnRzIG9mIGl0cyBhYmlsaXRpZXMgaW4gdGhlIEhFQVJUIGRvbWFpbjogV2hpbGUgYWR1bHRzIHRlbmRlZCB0byBncmFudCB2ZXJ5IGxpdHRsZSBpbiB0aGUgd2F5IG9mIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIChtZWFuIF9IRUFSVF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiSEVBUlQiLCAiYWR1bHRzIiwgImJlZXRsZSIpYCksIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgdGVuZGVkIHRvIGhvdmVyIGFyb3VuZCB0aGUgbWlkcG9pbnQgb2YgdGhlIHNjYWxlIChtZWFuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW43OSIsICJiZWV0bGUiKWApLgoKRm9yIHRoZSByb2JvdOKAlHRoZSBpbmFuaW1hdGUgImVkZ2UgY2FzZSIgZmVhdHVyZWQgaW4gdGhpcyBzdHVkeeKAlGJvdGggYWR1bHRzIGFuZCBjaGlsZHJlbiwgaW4gdGhlIGFnZ3JlZ2F0ZSwgaW5kaWNhdGVkIGEgaGlnaCBkZWdyZWUgb2YgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIChtZWFuIF9NSU5EXyBzY29yZSBhbW9uZyBhZHVsdHM6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJNSU5EIiwgImFkdWx0cyIsICJyb2JvdCIpYDsgYW1vbmcgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJNSU5EIiwgImNoaWxkcmVuNzkiLCAicm9ib3QiKWApLCBhbmQgYXBwZWFyZWQgdG8gYWdyZWUgdGhhdCB0aGUgcm9ib3QgaGFkIGxlc3MgaW4gdGhlIHdheSBvZiBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgYW5kIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRoYW4gdGhlIGJlZXRsZS4gSG93ZXZlciwgdGhlIHR3byBhZ2UgZ3JvdXBzIGFwcGVhciB0byBoYXZlIGRpdmVyZ2VkIGluIHRoZWlyIGFzc2Vzc21lbnRzIG9mIHRoZSBhYnNvbHV0ZSBkZWdyZWUgb2YgQk9EWSBhbmQgSEVBUlQgdGhhdCB0aGV5IHdlcmUgd2lsbGluZyB0byBncmFudCB0aGUgcm9ib3Q6IEFkdWx0cyBncmFudGVkIHZlcnkgbGl0dGxlIGluIGVpdGhlciBkb21haW4gKG1lYW4gX0JPRFlfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkMl83OWFkX21lYW5zLCAiQk9EWSIsICJhZHVsdHMiLCAicm9ib3QiKWA7IG1lYW4gX0hFQVJUXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIkhFQVJUIiwgImFkdWx0cyIsICJyb2JvdCIpYCksIHdoaWxlIGNoaWxkcmVuIGdyYW50ZWQgbWlkZGxpbmcgYWJpbGl0aWVzIGluIGJvdGggZG9tYWlucyAobWVhbiBfQk9EWV8gc2NvcmU6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQyXzc5YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNzkiLCAicm9ib3QiKWA7IG1lYW4gX0hFQVJUXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDJfNzlhZF9tZWFucywgIkhFQVJUIiwgImNoaWxkcmVuNzkiLCAicm9ib3QiKWApLgoKYGBge3J9CmZpZ3VyZTUuMl9wbG90cyA8LSBjaGFyYWN0ZXJfbXVsdGlwbG90X2FnZSgKICBkZl9zY29yZWQgPSBmdWxsX2pvaW4oZDJfYWRfc2NvcmVkX2FkLCBkMl83OV9zY29yZWRfYWQpLCAKICBzaG93X2FuaW1fYnlfc3ViaiA9IFQsCiAgYWdlX2xldmVscyA9IGMoImNoaWxkcmVuNzkiLCAiYWR1bHRzIiksCiAgYWdlX2xhYmVscyA9IGMoIkNoaWxkcmVuLCA3LTl5IiwgIkFkdWx0cyIpLAogIHBsb3RfbWFyZ191cHBlciA9IC00NSwgYXhpc19oZWlnaHQgPSAwLjA5KQpgYGAKCmBgYHtyfQpmaWd1cmU1LjJfcGxvdHNfY2FwIDwtIGFkZF9zdWIoZmlndXJlNS4yX3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIDUuMjogQXR0cmlidXRpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBhbW9uZyBjaGlsZHJlbiAoNy05eSkgYW5kIGFkdWx0cyBpbiBTdHVkeSAyLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gUGxvdHMgaW5jbHVkZSAoQSkgc2NvcmVzIGJ5IHRhcmdldCBjaGFyYWN0ZXIsIGFuZCAoQikgZGlzdHJpYnV0aW9ucyBvZiBzY29yZXMuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIiwgOTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuOH0KZ2dkcmF3KGZpZ3VyZTUuMl9wbG90c19jYXApCmBgYAoKYGBge3J9CmQyXzc5YWRfbnRpbGVzIDwtIGQyXzc5YWRfc2NvcmVkX2FkICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgZmFjdG9yKSAlPiUKICBtdXRhdGUoYmluID0gY3V0KHNjb3JlLCAxMyksCiAgICAgICAgIGJpbl9udW0gPSBhcy5udW1lcmljKGZhY3RvcihiaW4pKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGNvdW50KGFnZV9ncm91cCwgZmFjdG9yLCBiaW4sIGJpbl9udW0pICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgZmFjdG9yKSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4pKQpkMl83OWFkX250aWxlcwpgYGAKCmBgYHtyfQojIHJfZDJfZGV2Z3BfQk9EWSA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDJfNzlhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkJPRFkiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDJfZGV2Z3BfQk9EWSwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2Z3BfQk9EWSIpCgpyX2QyX2RldmdwX0JPRFkgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZncF9CT0RZIikKCnN1bW1hcnkocl9kMl9kZXZncF9CT0RZKQpgYGAKCmBgYHtyfQojIHJfZDJfZGV2Z3BfSEVBUlQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2dyb3VwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5YWRfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJIRUFSVCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kMl9kZXZncF9IRUFSVCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2Z3BfSEVBUlQiKQoKcl9kMl9kZXZncF9IRUFSVCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldmdwX0hFQVJUIikKCnN1bW1hcnkocl9kMl9kZXZncF9IRUFSVCkKYGBgCgpgYGB7cn0KIyByX2QyX2RldmdwX01JTkQgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2dyb3VwLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyXzc5YWRfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJNSU5EIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldmdwX01JTkQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldmdwX01JTkQiKQoKcl9kMl9kZXZncF9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2Z3BfTUlORCIpCgpzdW1tYXJ5KHJfZDJfZGV2Z3BfTUlORCkKYGBgCgpgYGB7cn0KcmVndGFiX2QyX2RldmdwIDwtIHJlZ3RhYl9kZXZncF9mdW4oCiAgcmVnX2JvZHkgPSByX2QyX2RldmdwX0JPRFksIAogIHJlZ19oZWFydCA9IHJfZDJfZGV2Z3BfSEVBUlQsCiAgcmVnX21pbmQgPSByX2QyX2RldmdwX01JTkQsCiAgYWdlX2xldmVscyA9IGMoImFnZV9ncm91cF9jaGlsZCIpLCAKICBhZ2VfbGFiZWxzID0gYygiQ2hpbGRyZW4gdnMuIGFkdWx0cyIpKQpgYGAKCmBgYHtyfQp0YWJsZTUuMSA8LSBkZXZncF90YWJsZV9mdW4ocmVndGFiX2RldmdwID0gcmVndGFiX2QyX2RldmdwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY2hhcmFjdGVycyA9IDIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbmFtZSA9ICJUYWJsZSA1LjEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X25hbWUgPSAiU3R1ZHkgMiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gIjctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fYWdlX2dyb3VwcyA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX2NvbXBhcmVfbGFiZWwgPSAiQmVldGxlIHZzLiBHTSIpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQp0YWJsZTUuMQpgYGAKCkEgc2VyaWVzIG9mIEJheWVzaWFuIHJlZ3Jlc3Npb24gYW5hbHlzZXMgY29uZmlybWVkIHRoZXNlIGdlbmVyYWwgaW1wcmVzc2lvbnMuIENoaWxkcmVuJ3MgX0JPRFlfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgdGhhbiBhZHVsdHMnIChzZWUgVGFibGUgNS4xLCAiQ2hpbGRyZW4gdnMuIGFkdWx0cyIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLCBwYXJ0aWN1bGFybHkgZm9yIHRoZSByb2JvdCAoc2VlIEZpZ3VyZSA1LjIsIHRvcCByb3cpOyBhcyBhIHJlc3VsdCwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYmVldGxlIGFuZCB0aGUgcm9ib3Qgd2FzIGF0dGVudWF0ZWQgYW1vbmcgY2hpbGRyZW4sIHJlbGF0aXZlIHRvIGFkdWx0cyAoc2VlIFRhYmxlIDUuMSwgIkludGVyYWN0aW9uIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbikuIENoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgd2VyZSBhbHNvIGhpZ2hlciB0aGFuIGFkdWx0cycgKHNlZSBUYWJsZSA1LjEsICJDaGlsZHJlbiB2cy4gYWR1bHRzIiByb3cgZm9yIHRoZSBIRUFSVCBkb21haW4sIGFuZCBGaWd1cmUgNS4yLCBtaWRkbGUgcm93KSwgYnV0IHRoaXMgZGlmZmVyZW5jZSBkaWQgbm90IHZhcnkgc3Vic3RhbnRpYWxseSBhY3Jvc3MgdGFyZ2V0IGNoYXJhY3RlcnMgKHNlZSBUYWJsZSA1LjEsICJJbnRlcmFjdGlvbiIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLiBUaGVyZSB3ZXJlIG5vIHN1YnN0YW50aWFsIGRpZmZlcmVuY2VzIGJldHdlZW4gY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiB0aGVpciBfTUlORF8gc2NvcmVzIChzZWUgVGFibGUgNS4xIGFuZCBGaWd1cmUgNS4yLCBib3R0b20gcm93KS4KClRha2VuIHRvZ2V0aGVyLCB0aGVzZSBvYnNlcnZhdGlvbnMgaGlnaGxpZ2h0IG9uZSBlc3BlY2lhbGx5IHN0cmlraW5nIGRpZmZlcmVuY2UgYmV0d2VlbiBjaGlsZHJlbiBhbmQgYWR1bHRzOiBGb3IgYm90aCBlZGdlIGNhc2VzLCByZWdhcmRsZXNzIG9mIGFuaW1hY3kgc3RhdHVzLCBjaGlsZHJlbiBhdHRyaWJ1dGVkIHN1YnN0YW50aWFsbHkgbW9yZSBIRUFSVCB0aGFuIGRpZCBhZHVsdHMuIEluZGVlZCwgZnVsbHkgYHIgcm91bmQoKGQyXzc5YWRfbnRpbGVzICU+JSBmaWx0ZXIoYWdlX2dyb3VwID09ICJhZHVsdHMiLCBmYWN0b3IgPT0gIkhFQVJUIiwgYmluX251bSA9PSAxKSkkcHJvcCwgMikqMTAwYCUgb2YgYWR1bHRzIGluIFN0dWR5IDIgaGFkIF9IRUFSVF8gc2NvcmVzIDwgYHIgZ3N1YigiXi4qLCIsICIiLCAoZDJfNzlhZF9udGlsZXMgJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIsIGZhY3RvciA9PSAiSEVBUlQiLCBiaW5fbnVtID09IDEpKSRiaW4pICU+JSBnc3ViKCJcXF0iLCAiIiwgLikgJT4lIGFzLm51bWVyaWMoKSAlPiUgY2VpbGluZ19kZWMoMilgIChpLmUuLCBhbnN3ZXJlZCBhdCBtb3N0IF9vbmVfIG9mIHRoZSA2IF9IRUFSVF8gaXRlbXMgd2l0aCBhIHJlc3BvbnNlIG9mICJLSU5EQSwiIGFuZCBvdGhlcndpc2UgYW5zd2VyZWQgIk5PIiB0byBhbGwgX0hFQVJUXyBpdGVtcykuIFRoZSBtb3JlIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9mIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgYWNyb3NzIHRoZSAwLTEgcmFuZ2Ugc3RhbmRzIGluIHN0YXJrIGNvbnRyYXN0IHRvIHRoaXMgYWR1bHQgc3RhbmRhcmQ7IHNlZSBGaWd1cmUgNS4yLCBwYW5lbCBCLgoKIyMjIEFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gNy05eQoKSW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIEkgY29tcGFyZWQgdGhlIGF0dHJpYnV0aW9ucyBvZiA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGFzIGEgZ3JvdXAgdG8gdGhvc2Ugb2YgYWR1bHRzLiBIZXJlLCBJIGV4cGxvcmUgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgd2l0aGluIHRoZSBjaGlsZCBzYW1wbGU6IEhvdyBtaWdodCBjaGlsZHJlbidzIGF0dHJpYnV0aW9ucyBjaGFuZ2Ugb3ZlciB0aGUgYWdlIHJhbmdlIGluY2x1ZGVkIGluIHRoaXMgc3R1ZHk/IAoKSWYgdGhlIHNuYXBzaG90cyBvZiBjaGlsZHJlbiB2cy4gYWR1bHRzIGFyZSByZWZsZWN0aXZlIG9mIF9kZXZlbG9wbWVudGFsXyBjaGFuZ2VzLCBJIHdvdWxkIGV4cGVjdCB0aGF0LCB3aXRoIGluY3JlYXNpbmcgYWdlLCBjaGlsZHJlbidzIHJlc3BvbnNlcyB3b3VsZCBiZWNvbWUgaW5jcmVhc2luZ2x5IGFkdWx0LWxpa2UuIEJhc2VkIG9uIHRoZSBhZ2UgZ3JvdXAgY29tcGFyaXNvbnMgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHRoaXMgd291bGQgbWVhbiB0aGF0IGFnZSB3b3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggbG93ZXIgX0JPRFlfIHNjb3JlcywgcGFydGljdWxhcmx5IGZvciB0aGUgcm9ib3Q7IGFuZCB3aXRoIGxvd2VyIF9IRUFSVF8gc2NvcmVzIGZvciBib3RoIHRhcmdldCBjaGFyYWN0ZXJzLgoKYGBge3J9CnBsb3RzX2QyX2RldiA8LSBjaGFyYWN0ZXJfZGV2cGxvdChkZl9zY29yZWRfYWQgPSBkMl9hZF9zY29yZWRfYWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZfc2NvcmVkX2NoID0gZDJfNzlfc2NvcmVkX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmX2FnZSA9IGQyXzc5KQpgYGAKCmBgYHtyfQpmaWd1cmU1LjMgPC0gcGxvdHNfZDJfZGV2ICsKICBsYWJzKHRpdGxlID0gIlN0dWR5IDI6IENoaWxkcmVuLCA3LTl5IikKYGBgCgpgYGB7cn0KZmlndXJlNS4zX3Bsb3RzX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTUuMywgc3RyX3dyYXAoIkZpZ3VyZSA1LjM6IENoYW5nZXMgaW4gYXR0cmlidXRpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBhbW9uZyA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDIuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbmRpdmlkdWFsIGNoaWxkcmVuIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzOyBtZWFuIHNjb3JlcyBhbW9uZyBhZHVsdHMgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gTGluZXMgY29ycmVzcG9uZCB0byBzaW1wbGUgbGluZWFyIHJlZ3Jlc3Npb25zIChmb3JtdWxhOiBzY29yZSB+IGFnZSkuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjV9CmdnZHJhdyhmaWd1cmU1LjNfcGxvdHNfY2FwKQpgYGAKCmBgYHtyfQpkMl83OWFnZV9zY29yZWRfYWQgPC0gZDJfNzlfc2NvcmVkX2FkICU+JQogIGxlZnRfam9pbihkMl83OSAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGxldmVscyhkMl9hZF9zY29yZWRfYWQkY2hhcmFjdGVyKSksCiAgICAgICAgIGFnZV9jZW50ZXJlZCA9IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSkKCmNvbnRyYXN0cyhkMl83OWFnZV9zY29yZWRfYWQkY2hhcmFjdGVyKSA8LSBjb250cmFzdHNfc3VtX2VkZ2UKY29udHJhc3RzKGQyXzc5YWdlX3Njb3JlZF9hZCRmYWN0b3IpIDwtIGNvbnRyYXN0c19jbnQzX2ZhY3Rvcgpjb250cmFzdHMoZDJfNzlhZ2Vfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpgYGAKCmBgYHtyfQojIHJfZDJfZGV2c2NvcmVfQk9EWSA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDJfNzlhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJCT0RZIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldnNjb3JlX0JPRFksICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldnNjb3JlX0JPRFkiKQoKcl9kMl9kZXZzY29yZV9CT0RZIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2c2NvcmVfQk9EWSIpCgpzdW1tYXJ5KHJfZDJfZGV2c2NvcmVfQk9EWSkKYGBgCgpgYGB7cn0KIyByX2QyX2RldnNjb3JlX0hFQVJUIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkMl83OWFnZV9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkhFQVJUIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldnNjb3JlX0hFQVJULCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kMl9kZXZzY29yZV9IRUFSVCIpCgpyX2QyX2RldnNjb3JlX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2c2NvcmVfSEVBUlQiKQoKc3VtbWFyeShyX2QyX2RldnNjb3JlX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDJfZGV2c2NvcmVfTUlORCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDJfNzlhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJNSU5EIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QyX2RldnNjb3JlX01JTkQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QyX2RldnNjb3JlX01JTkQiKQoKcl9kMl9kZXZzY29yZV9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDJfZGV2c2NvcmVfTUlORCIpCgpzdW1tYXJ5KHJfZDJfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KcmVndGFiX2QyX2RldnNjb3JlIDwtIHJlZ3RhYl9kZXZzY29yZV9mdW4ocmVnX2JvZHkgPSByX2QyX2RldnNjb3JlX0JPRFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19oZWFydCA9IHJfZDJfZGV2c2NvcmVfSEVBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19taW5kID0gcl9kMl9kZXZzY29yZV9NSU5EKQpgYGAKCmBgYHtyfQp0YWJsZTUuMiA8LSBkZXZzY29yZV90YWJsZV9mdW4ocmVndGFiX2RldnNjb3JlID0gcmVndGFiX2QyX2RldnNjb3JlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY2hhcmFjdGVycyA9IDIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbmFtZSA9ICJUYWJsZSA1LjIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X25hbWUgPSAiU3R1ZHkgMiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlX3JhbmdlID0gIjctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihkMl83OSRhZ2UsIG5hLnJtID0gVCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb21wYXJlX2xhYmVsID0gIkJlZXRsZSB2cy4gR00iKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KdGFibGU1LjIKYGBgCgpJbiBmYWN0LCB0aGlzIGlzIGV4YWN0bHkgd2hhdCBJIG9ic2VydmUgYW1vbmcgdGhlIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gdGhpcyBzdHVkeS4gCgpJbiBsaW5lIHdpdGggYW4gYWR1bHQtbGlrZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbiwgX0JPRFlfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIHRoZSBiZWV0bGUgKHRoZSBhbmltYXRlIHRhcmdldCBjaGFyYWN0ZXIpIHRoYW4gYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIHRoZSByb2JvdCAodGhlIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVyOyBzZWUgVGFibGUgNS4yLCAiQmVldGxlIHZzLiBHTSIgcm93IGZvciB0aGUgQk9EWSBkb21haW4pLiBXaXRoIGFnZSwgaG93ZXZlciwgY2hpbGRyZW4ncyBfQk9EWV8gc2NvcmVzIGdlbmVyYWxseSBkZWNyZWFzZWQgKGFuZCBUYWJsZSA1LjIsICJFeGFjdCBhZ2UiIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKSwgZHJpdmVuIGJ5IGNoYW5nZXMgaW4gY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgQk9EWSB0byB0aGUgcm9ib3QuIEFzIGEgcmVzdWx0LCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBiZWV0bGUgYW5kIHRoZSByb2JvdCBpbmNyZWFzZWQgb3ZlciB0aGUgYWdlIHJhbmdlIChzZWUgVGFibGUgNS4yLCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluLCBhbmQgRmlndXJlIDUuMywgbGVmdG1vc3QgcGxvdCkuCgpNZWFud2hpbGUsIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgZGlkIG5vdCBkaWZmZXIgcmVsaWFibHkgYWNyb3NzIHRoZSB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgaW4gdGhpcyBzdHVkeSAoc2VlIFRhYmxlIDUuMiwgIkJlZXRsZSB2cy4gR00iIHJvdyBmb3IgdGhlIEhFQVJUIGRvbWFpbinigJRidXQgd2l0aCBhZ2UsIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgZm9yIGJvdGggY2hhcmFjdGVycyBnZW5lcmFsbHkgZGVjcmVhc2VkIChhbmQgVGFibGUgNS4yLCAiRXhhY3QgYWdlIiBhbmQgIkludGVyYWN0aW9uIiByb3dzIGZvciB0aGUgSEVBUlQgZG9tYWluLCBhbmQgRmlndXJlIDUuMywgY2VudGVyIHBsb3QpLgoKRmluYWxseSwgX01JTkRfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIHRoZSByb2JvdCAodGhlIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVyKSB0aGFuIGFtb25nIGNoaWxkcmVuIHdobyBhc3Nlc3NlZCB0aGUgYmVldGxlICh0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVyOyBzZWUgVGFibGUgNS4yLCAiQmVldGxlIHZzLiBHTSIgcm93IGZvciB0aGUgTUlORCBkb21haW4pLiBJbiBhZGRpdGlvbiB0byB0aGUgcHJlZGljdGVkIGFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIGluIHRoZSBCT0RZIGFuZCBIRUFSVCBkb21haW5zLCBjaGlsZHJlbidzIF9NSU5EXyBzY29yZXMgZm9yIGJvdGggY2hhcmFjdGVycyBnZW5lcmFsbHkgaW5jcmVhc2VkIHdpdGggYWdlIChhbmQgVGFibGUgNS4yLCAiRXhhY3QgYWdlIiBhbmQgIkludGVyYWN0aW9uIiByb3dzIGZvciB0aGUgTUlORCBkb21haW4sIGFuZCBGaWd1cmUgNS4zLCByaWdodG1vc3QgcGxvdCkuCgojIyBEaXNjdXNzaW9uCgpBZHVsdHMgaW4gU3R1ZHkgMiBkaXN0aW5ndWlzaGVkIHN0cm9uZ2x5IGJldHdlZW4gdGhlIGFuaW1hdGUgY2hhcmFjdGVyICh0aGUgYmVldGxlKSB2cy4gdGhlIGluYW5pbWF0ZSBjaGFyYWN0ZXIgKHRoZSByb2JvdCkgaW4gdGVybXMgb2YgdGhlaXIgY2FwYWNpdGllcyBpbiB0aGUgQk9EWSBkb21haW4uIFRoZXkgZ3JhbnRlZCBib3RoIG9mIHRoZXNlICJlZGdlIGNhc2VzIiByZWxhdGl2ZWx5IGxpbWl0ZWQgYWJpbGl0aWVzIGluIHRoZSBIRUFSVCBkb21haW4sIGFuZCByZWxhdGl2ZWx5IHN0cm9uZyBhYmlsaXRpZXMgaW4gdGhlIE1JTkQgZG9tYWluICh3aXRoIHRoZSByb2JvdCBhY3R1YWxseSBleGNlZWRpbmcgdGhlIGJlZXRsZSBpbiBpdHMgcGVyY2VpdmVkIE1JTkQgYWJpbGl0aWVzKS4KCkxpa2UgYWR1bHRzLCA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGNsZWFybHkgcmVzcGVjdGVkIHRoZSBhbmltYXRlLWluYW5pYW10ZSBkaXN0aW5jdGlvbiBpbiB0aGVpciBhdHRyaWJ1dGlvbnMgb2YgQk9EWSBhYmlsaXRpZXMuIEV2ZW4gYW1vbmcgdGhlc2UgcmVsYXRpdmVseSAib2xkIiBjaGlsZHJlbiwgaG93ZXZlciwgdGhlcmUgd2FzIHJvb20gZm9yIGluY3JlYXNpbmcgImFkdWx0LWxpa2UtbmVzcyIgYWNyb3NzIHRoZSBhZ2UgcmFuZ2U6IFRoaXMgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIG9mIGEgYmVldGxlIHZzLiByb2JvdCBncmV3IGxhcmdlciB3aXRoIGluY3JlYXNpbmcgYWdlLCBkcml2ZW4gYnkgZGVjcmVhc2VzIGluIF9CT0RZXyBzY29yZXMgZm9yIHRoZSByb2JvdC4gCgpUaGUgYmlnZ2VzdCBkaWZmZXJlbmNlIGJldHdlZW4gY2hpbGRyZW4gYW5kIGFkdWx0cyBpbiBTdHVkeSAyIHdhcyBpbiB0aGUgSEVBUlQgZG9tYWluLiBDaGlsZHJlbiBhdHRyaWJ1dGVkIGZhciBtb3JlIEhFQVJUIGFiaWxpdGllc+KAlHRvIGJvdGggdGhlIGJlZXRsZSBhbmQgdGhlIHJvYm904oCUdGhhbiBkaWQgYWR1bHRzLCBhbmQgYWx0aG91Z2ggdGhpcyB0ZW5kZW5jeSBkZWNyZWFzZWQgYWNyb3NzIHRoZSBhZ2UgcmFuZ2UsIGl0IGRpZCBub3QgYXBwZWFyIHRvIHJlYWNoIGFkdWx0LWxpa2UgbGV2ZWxzIGV2ZW4gYW1vbmcgdGhlIG9sZGVzdCBjaGlsZHJlbiBpbiB0aGlzIHNhbXBsZSAoc2VlIEZpZ3VyZSA1LjMsIGNlbnRlciBwYW5lbCkuIAoKQ2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgTUlORCB0byB0aGVzZSBlZGdlIGNhc2VzIHdlcmUgZ2VuZXJhbGx5IGFkdWx0LWxpa2UsIGNoYXJhY3Rlcml6ZWQgYnkgZ2VuZXJhbGx5IGhpZ2ggX01JTkRfIHNjb3JlcywgcGFydGljdWxhcmx5IGZvciB0aGUgcm9ib3QuCgoKIyBTdHVkeSAzOiBDb25jZXB0dWFsIGNoYW5nZSBvdmVyIGVhcmx5IGFuZCBtaWRkbGUgY2hpbGRob29kICg0LTl5KQoKU3R1ZHkgMyBidWlsZHMgb24gdGhlIGludmVzdGlnYXRpb24gb2YgbWlkZGxlIGNoaWxkaG9vZCAoNy05eSkgaW5pdGlhdGVkIGluIFN0dWR5IDIgYW5kIGV4dGVuZHMgdGhpcyBleHBsb3JhdGlvbiBvZiBjb25jZXB0dWFsIGNoYW5nZSBpbnRvIGVhcmxpZXIgY2hpbGRob29kICg0LTZ5KS4gSW4gdGhpcyBjaGFwdGVyLCBJIGFnYWluIGZvY3VzIG9uIHdoYXQgdGhpcyBzdHVkeSBjYW4gcmV2ZWFsIGFib3V0IGNoYW5nZXMgaW4gdGhlIGRlcGxveW1lbnQgb2YgdGhpcyBjb25jZXB04oCUaS5lLiwgdGhlIGF0dHJpYnV0aW9uIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCB0byB2YXJpb3VzIGJlaW5ncyBpbiB0aGUgd29ybGTigJRvdmVyIHRoZSBjb3Vyc2Ugb2YgZWFybHkgYW5kIG1pZGRsZSBjaGlsZGhvb2QgKDctOXkpLgoKVG8gcmV2aWV3LCBpbiBTdHVkeSAzLCBgciBucm93KGQzX2FkX3dpZGUpYCBVUyBhZHVsdHMsIGByIG5yb3coZDNfNzlfd2lkZSlgICJvbGRlciIgY2hpbGRyZW4gKGByIHN1bW1hcnkoZDNfNzkkYWdlKVsiTWluLiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYC1gciBzdW1tYXJ5KGQzXzc5JGFnZSlbIk1heC4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAgeWVhcnM7IG1lZGlhbjogYHIgc3VtbWFyeShkM183OSRhZ2UpWyJNZWRpYW4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWB5KSwgYW5kIGByIG5yb3coZDNfNDZfd2lkZSlgICJ5b3VuZ2VyIiBjaGlsZHJlbiAoYHIgc3VtbWFyeShkM180NiRhZ2UpWyJNaW4uIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgLWByIHN1bW1hcnkoZDNfNDYkYWdlKVsiTWF4LiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYCB5ZWFyczsgbWVkaWFuOiBgciBzdW1tYXJ5KGQzXzQ2JGFnZSlbIk1lZGlhbiJdICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpYHkpIGVhY2ggYXNzZXNzZWQgYSBzaW5nbGUgdGFyZ2V0IGNoYXJhY3RlciBvbiAyMCBtZW50YWwgY2FwYWNpdGllcy4gVGhpcyBzdHVkeSBlbXBsb3llZCB0aGUgImRpdmVyc2UgY2hhcmFjdGVycyIgdmFyaWFudCBvZiB0aGUgZ2VuZXJhbCBhcHByb2FjaCwgd2l0aCBwYXJ0aWNpcGFudHMgcmFuZG9tbHkgb3IgcHNldWRvLXJhbmRvbWx5IGFzc2lnbmVkIHRvIGFzc2VzcyBvbmUgb2YgdGhlIGZvbGxvd2luZyA5IGNoYXJhY3RlcnM6IGFuIGVsZXBoYW50LCBhIGdvYXQsIGEgbW91c2UsIGEgYmlyZCwgYSBiZWV0bGUsIGEgdGVkZHkgYmVhciwgYSBkb2xsLCBhIHJvYm90LCBvciBhIGNvbXB1dGVyLiAoU2VlIENoYXB0ZXIgSUkgZm9yIGRldGFpbGVkIG1ldGhvZHMuKQoKIyMgU3BlY2lhbCBub3RlcyBvbiBkYXRhIHByb2Nlc3NpbmcgYW5kIGFuYWx5c2lzCgpBcyBpbiBTdHVkeSAyLCB0byBmYWNpbGl0YXRlIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgdGhyZWUgYWdlIGdyb3VwcyBpbmNsdWRlZCBpbiBTdHVkeSAzLCBJIHVzZSBhZHVsdHMnIF9CT0RZXywgX0hFQVJUXywgYW5kIF9NSU5EXyBzY2FsZXMgKGFzIGRlc2NyaWJlZCBpbiBDaGFwdGVyIElWKSB0byBhbmFseXplIGJvdGggYWdlIGdyb3Vwcy4gRm9yIGFuYWx5c2VzIHVzaW5nIHNjYWxlcyBkZXJpdmVkIGZyb20gRUZBIG9mIGNoaWxkcmVuJ3Mgb3duIHJlc3BvbnNlcywgc2VlIFtYWCBBUFBFTkRJWCBDP10uCgojIyBSZXN1bHRzCgpgYGB7cn0KZDNfNDY3OWFkX3Njb3JlZF9hZCA8LSBmdWxsX2pvaW4oZDNfYWRfc2NvcmVkX2FkLCBkM183OV9zY29yZWRfYWQpICU+JQogIGZ1bGxfam9pbihkM180Nl9zY29yZWRfYWQpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDNfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfZ3JvdXAgPSBmYWN0b3IoYWdlX2dyb3VwKSkKCmNvbnRyYXN0cyhkM180Njc5YWRfc2NvcmVkX2FkJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9kdjA5CmNvbnRyYXN0cyhkM180Njc5YWRfc2NvcmVkX2FkJGZhY3RvcikgPC0gY29udHJhc3RzX2NudDNfZmFjdG9yCmNvbnRyYXN0cyhkM180Njc5YWRfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpjb250cmFzdHMoZDNfNDY3OWFkX3Njb3JlZF9hZCRhZ2VfZ3JvdXApIDwtIGNvbnRyYXN0c19kdW0zX2FnZWdwCmBgYAoKIyMjIENoaWxkcmVuIHZzLiBhZHVsdHMKCmBgYHtyfQpkM180Njc5YWRfbWVhbnMgPC0gZDNfNDY3OWFkX3Njb3JlZF9hZCAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGFuaW1faW5hbiwgZmFjdG9yKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpCmBgYAoKU2VlIEZpZ3VyZSA1LjQsIHBhbmVsIEEsIGZvciBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NvcmVzIGZvciBlYWNoIG9mIHRoZSBuaW5lIHRhcmdldCBjaGFyYWN0ZXJzIGFtb25nIHRoZSB5b3VuZ2VyIGNoaWxkcmVuICg0LTZ5KSwgb2xkZXIgY2hpbGRyZW4gKDctOXkpLCBhbmQgYWR1bHRzIGluIFN0dWR5IDMsIGFuZCBGaWd1cmUgNS40LCBwYW5lbCBCLCBmb3IgYSB2aXN1YWxpemF0aW9uIG9mIHNjb3JlcyB3aXRoIHRhcmdldCBjaGFyYWN0ZXJzIGdyb3VwZWQgaW50byBhbmltYXRlIGJlaW5ncyAoZWxlcGhhbnQsIGdvYXQsIG1vdXNlLCBiaXJkIGJlZXRsZSkgdnMuIGluYW5pbWF0ZSBvYmplY3RzICh0ZWRkeSBiZWFyLCBkb2xsLCByb2JvdCwgY29tcHV0ZXIpLiBUbyBmYWNpbGl0YXRlIGNvbXBhcmlzb24gd2l0aCBTdHVkaWVzIDIgYW5kIDQsIEkgd2lsbCBmb2N1cyBoZXJlIG9uIGFuaW1hY3kgc3RhdHVzLCByYXRoZXIgdGhhbiBhbmFsenlpbmcgYWxsIHRhcmdldCBjaGFyYWN0ZXJzIGluZGl2aWR1YWxseS4KCkluIHRoZSBhZ2dyZWdhdGUsIGFsbCB0aHJlZSBhZ2UgZ3JvdXBzIHNlZW0gdG8gaGF2ZSBjb25zaWRlcmVkIHRoZSBhbmltYXRlIGJlaW5ncyBpbmNsdWRlZCBpbiB0aGlzIHN0dWR5IHRvIGhhdmUgYSByZWxhdGl2ZWx5IGhpZ2ggZGVncmVlIG9mIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyAobWVhbiBfQk9EWV8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJCT0RZIiwgImFkdWx0cyIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYDsgYW1vbmcgb2xkZXIgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIkJPRFkiLCAiY2hpbGRyZW43OSIsIHdoaWNoX2FuaW0gPSAiYW5pbWF0ZSIpYDsgYW1vbmcgeW91bmdlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiQk9EWSIsICJjaGlsZHJlbjQ2Iiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgKSwgYW5kIGEgbWlkZGxpbmcgZGVncmVlIG9mIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIChtZWFuIF9IRUFSVF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJIRUFSVCIsICJhZHVsdHMiLCB3aGljaF9hbmltID0gImFuaW1hdGUiKWA7IGFtb25nIG9sZGVyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJIRUFSVCIsICJjaGlsZHJlbjc5Iiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgOyBhbW9uZyB5b3VuZ2VyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJIRUFSVCIsICJjaGlsZHJlbjQ2Iiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgKS4gQXNzZXNzbWVudHMgb2YgYW5pbWF0ZSBiZWluZ3MnIGFiaWxpdGllcyBpbiB0aGUgTUlORCBkb21haW4gYXBwZWFyIHRvIGhhdmUgdmFyaWVkIG1vcmUgYnkgYWdlIGdyb3VwOiBXaGlsZSBhZHVsdHMgdGVuZGVkIHRvIGdyYW50IGFuaW1hdGUgYmVpbmdzIGEgaGlnaCBkZWdyZWUgb2YgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIChtZWFuIF9NSU5EXyBzY29yZSBhbW9uZyBhZHVsdHM6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIk1JTkQiLCAiYWR1bHRzIiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgKSwgeW91bmdlciBjaGlsZHJlbidzIF9NSU5EXyBzY29yZXMgdGVuZGVkIHRvIGhvdmVyIGFyb3VuZCB0aGUgbWlkcG9pbnQgb2YgdGhlIHNjYWxlIChtZWFuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJNSU5EIiwgImNoaWxkcmVuNDYiLCB3aGljaF9hbmltID0gImFuaW1hdGUiKWApLCB3aXRoIG9sZGVyIGNoaWxkcmVuIGZhbGxpbmcgaW4gYmV0d2VlbiAobWVhbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiTUlORCIsICJjaGlsZHJlbjc5Iiwgd2hpY2hfYW5pbSA9ICJhbmltYXRlIilgKS4KCkZvciB0aGUgaW5hbmltYXRlIGJlaW5ncyBpbmNsdWRlZCBpbiB0aGlzIHN0dWR5LCB0aGVyZSB3YXMgYSBoaWdoIGRlZ3JlZSBvZiBjb25zZW5zdXMgYW1vbmcgYWR1bHRzIHRoYXQgc3VjaCBlbnRpdGllcyBoYWQgdmlydHVhbGx5IG5vIHBoeXNpb2xvZ2ljYWwgb3Igc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgKG1lYW4gX0JPRFlfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJCT0RZIiwgImFkdWx0cyIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgOyBtZWFuIF9IRUFSVF8gc2NvcmU6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIkhFQVJUIiwgImFkdWx0cyIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgKS4gSW4gY29udHJhc3QsIGJvdGggZ3JvdXBzIG9mIGNoaWxkcmVuLCBpbiB0aGUgYWdncmVnYXRlLCBncmFudGVkIGxvdyB0byBtb2RlcmF0ZSBhYmlsaXRpZXMgdG8gaW5hbmltYXRlIGJlaW5ncyBpbiBib3RoIHRoZSBCT0RZIGRvbWFpbiAobWVhbiBfQk9EWV8gc2NvcmUgYW1vbmcgb2xkZXIgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIkJPRFkiLCAiY2hpbGRyZW43OSIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgOyBhbW9uZyB5b3VuZ2VyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNDYiLCB3aGljaF9hbmltID0gImluYW5pbWF0ZSIpYCkgYW5kIHRoZSBIRUFSVCBkb21haW4gKG1lYW4gX0hFQVJUXyBzY29yZSBhbW9uZyBvbGRlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW43OSIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgOyBhbW9uZyB5b3VuZ2VyIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJIRUFSVCIsICJjaGlsZHJlbjQ2Iiwgd2hpY2hfYW5pbSA9ICJpbmFuaW1hdGUiKWApLiBBbGwgdGhyZWUgYWdlIGdyb3VwcywgaW4gdGhlIGFnZ3JlZ2F0ZSwgZ3JhbnRlZCBtaWRkbGluZyBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgdG8gdGhlc2UgaW5hbmltYXRlIGNoYXJhY3RlcnMgKHdoaWNoIGluY2x1ZGVkIHR3byAiaW50ZWxsaWdlbnQiIHRlY2hub2xvZ2llczsgbWVhbiBfTUlORF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkM180Njc5YWRfbWVhbnMsICJNSU5EIiwgImFkdWx0cyIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgOyBhbW9uZyBvbGRlciBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDNfNDY3OWFkX21lYW5zLCAiTUlORCIsICJjaGlsZHJlbjc5Iiwgd2hpY2hfYW5pbSA9ICJpbmFuaW1hdGUiKWA7IGFtb25nIHlvdW5nZXIgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQzXzQ2NzlhZF9tZWFucywgIk1JTkQiLCAiY2hpbGRyZW40NiIsIHdoaWNoX2FuaW0gPSAiaW5hbmltYXRlIilgKS4KCmBgYHtyfQpmaWd1cmU1LjRfcGxvdHMgPC0gY2hhcmFjdGVyX211bHRpcGxvdF9hZ2UoCiAgZGZfc2NvcmVkID0gZnVsbF9qb2luKGQzX2FkX3Njb3JlZF9hZCwgZDNfNDZfc2NvcmVkX2FkKSAlPiUKICAgIGZ1bGxfam9pbihkM183OV9zY29yZWRfYWQpLCAKICBzaG93X2FuaW1fYnlfc3ViaiA9IFQsCiAgYWdlX2xldmVscyA9IGMoImNoaWxkcmVuNDYiLCAiY2hpbGRyZW43OSIsICJhZHVsdHMiKSwKICBhZ2VfbGFiZWxzID0gYygiQ2hpbGRyZW4sIDQtNnkiLCAiQ2hpbGRyZW4sIDctOXkiLCAiQWR1bHRzIiksCiAgaml0dGVyX3dpZCA9IDEuNSwKICBwbG90X21hcmdfdXBwZXIgPSAtNzAsIGF4aXNfaGVpZ2h0ID0gMC4xMSkKYGBgCgpgYGB7cn0KZmlndXJlNS40X3Bsb3RzX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTUuNF9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSA1LjQ6IEF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYW1vbmcgeW91bmdlciBjaGlsZHJlbiAoNC02eSksIG9sZGVyIGNoaWxkcmVuICg3LTl5KSwgYW5kIGFkdWx0cyBpbiBTdHVkeSAzLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gUGxvdHMgaW5jbHVkZSAoQSkgc2NvcmVzIGJ5IHRhcmdldCBjaGFyYWN0ZXIsIChCKSBhbmltYWN5IHN0YXR1cywgYW5kIChDKSBkaXN0cmlidXRpb25zIG9mIHNjb3Jlcy4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgc21hbGwsIHRyYW5zbHVjZW50IGNpcmNsZXMsIGFuZCBtZWFuIHNjb3JlcyBieSBjaGFyYWN0ZXIgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4iLCAyMzApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gMTAsIGZpZy5hc3AgPSAwLjR9CmdnZHJhdyhmaWd1cmU1LjRfcGxvdHNfY2FwKQpgYGAKCmBgYHtyfQojIHJfZDNfZGV2Z3BfQk9EWSA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDY3OWFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiQk9EWSIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kM19kZXZncF9CT0RZLCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZncF9CT0RZIikKCnJfZDNfZGV2Z3BfQk9EWSA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldmdwX0JPRFkiKQoKc3VtbWFyeShyX2QzX2RldmdwX0JPRFkpCmBgYAoKYGBge3J9CiMgcl9kM19kZXZncF9IRUFSVCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDY3OWFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiSEVBUlQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDNfZGV2Z3BfSEVBUlQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldmdwX0hFQVJUIikKCnJfZDNfZGV2Z3BfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZncF9IRUFSVCIpCgpzdW1tYXJ5KHJfZDNfZGV2Z3BfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kM19kZXZncF9NSU5EIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9ncm91cCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkM180Njc5YWRfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJNSU5EIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QzX2RldmdwX01JTkQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldmdwX01JTkQiKQoKcl9kM19kZXZncF9NSU5EIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2Z3BfTUlORCIpCgpzdW1tYXJ5KHJfZDNfZGV2Z3BfTUlORCkKYGBgCgpgYGB7cn0KcmVndGFiX2QzX2RldmdwIDwtIHJlZ3RhYl9kZXZncF9mdW4oCiAgcmVnX2JvZHkgPSByX2QzX2RldmdwX0JPRFksIAogIHJlZ19oZWFydCA9IHJfZDNfZGV2Z3BfSEVBUlQsCiAgcmVnX21pbmQgPSByX2QzX2RldmdwX01JTkQsCiAgYWdlX2xldmVscyA9IGMoImFnZV9ncm91cF9vbGQiLCAiYWdlX2dyb3VwX3luZyIpLCAKICBhZ2VfbGFiZWxzID0gYygiT2xkZXIgY2hpbGRyZW4gKDctOXkpIHZzLiBhZHVsdHMiLAogICAgICAgICAgICAgICAgICJZb3VuZ2VyIGNoaWxkcmVuICg0LTZ5KSB2cy4gYWR1bHRzIikpCmBgYAoKYGBge3J9CnRhYmxlNS4zIDwtIGRldmdwX3RhYmxlX2Z1bihyZWd0YWJfZGV2Z3AgPSByZWd0YWJfZDNfZGV2Z3AsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9jaGFyYWN0ZXJzID0gOSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9uYW1lID0gIlRhYmxlIDUuMyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1ZHlfbmFtZSA9ICJTdHVkeSAzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSAiNC0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2FnZV9ncm91cHMgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY29tcGFyZV9sYWJlbCA9ICJBbmltYXRlIGNoYXJhY3RlcnMgdnMuIEdNIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS4zCmBgYAoKQSBzZXJpZXMgb2YgQmF5ZXNpYW4gcmVncmVzc2lvbiBhbmFseXNlcyBjb25maXJtZWQgdGhlc2UgZ2VuZXJhbCBpbXByZXNzaW9ucyBvZiBkaWZmZXJlbmNlcyBhY3Jvc3MgYWdlIGdyb3Vwcy4gCgpOZWl0aGVyIG9sZGVyIG5vciB5b3VuZ2VyIGNoaWxkcmVuJ3MgX0JPRFlfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgdGhhbiBhZHVsdHMnIChzZWUgVGFibGUgNS4zLCAiT2xkZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyIgYW5kICJZb3VuZ2VyIGNoaWxkcmVuIHZzLiBhZHVsdHMiIHJvd3MgZm9yIHRoZSBCT0RZIGRvbWFpbiksIGJ1dCBpbiBib3RoIGdyb3VwcyBvZiBjaGlsZHJlbiB0aGUgZGlmZmVyZW5jZSBpbiBfQk9EWV8gc2NvcmVzIGJldHdlZW4gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgd2FzIGF0dGVudWF0ZWQsIHJlbGF0aXZlIHRvIGFkdWx0cyAoc2VlIFRhYmxlIDUuMywgIkludGVyYWN0aW9uIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbikuIE1lYW53aGlsZSwgaW4gdGhlIF9IRUFSVF8gZG9tYWluLCBib3RoIG9sZGVyIGFuZCB5b3VuZ2VyIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIHRoYW4gYWR1bHRzJyAoc2VlIFRhYmxlIDUuMywgIkNoaWxkcmVuIHZzLiBhZHVsdHMiIHJvdyBmb3IgdGhlIEhFQVJUIGRvbWFpbiwgYW5kIEZpZ3VyZSA1LjQsIG1pZGRsZSByb3cpLCBidXQgdGhpcyBkaWZmZXJlbmNlIGRpZCBub3QgdmFyeSBzdWJzdGFudGlhbGx5IGFjcm9zcyB0YXJnZXQgY2hhcmFjdGVycyAoc2VlIFRhYmxlIDUuMywgIkludGVyYWN0aW9uIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbikuIEZpbmFsbHksIGluIHRoZSBfTUlORF8gZG9tYWluLCB5b3VuZ2VyIGNoaWxkcmVuJ3MgKGJ1dCBub3Qgb2xkZXIgY2hpbGRyZW4ncykgX01JTkRfIHNjb3JlcyB3ZXJlIHN1YnN0YW50aWFsbHkgbG93ZXIgdGhhbiBhZHVsdHMnIChzZWUgVGFibGUgNS4zLCAiT2xkZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyIgYW5kICJZb3VuZ2VyIGNoaWxkcmVuIHZzLiBhZHVsdHMiIHJvd3MgZm9yIHRoZSBNSU5EIGRvbWFpbikuIEluIGFkZGl0aW9uLCBpbiBib3RoIGdyb3VwcyBvZiBjaGlsZHJlbiB0aGUgZGlmZmVyZW5jZSBpbiBfTUlORF8gc2NvcmVzIGJldHdlZW4gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgd2FzIGF0dGVudWF0ZWQsIHJlbGF0aXZlIHRvIGFkdWx0cyAoc2VlIFRhYmxlIDUuMywgIkludGVyYWN0aW9uIiByb3cgZm9yIHRoZSBNSU5EIGRvbWFpbikuCgojIyMgQWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgYmV0d2VlbiA0LTl5CgpIZXJlLCBJIHNoaWZ0IGZyb20gdGhlICJzbmFwc2hvdCIgYWdlIGdyb3B1IGNvbXBhcmlzb25zIG9mIHRoZSBwcmV2aW91cyBzZWN0aW9uIHRvIGFuIGV4YW1pbmF0aW9uIG9mIGFnZS1yZWxhdGVkIGRpZmZlcmVuY2VzIHdpdGhpbiB0aGUgY2hpbGQgc2FtcGxlOiBIb3cgbWlnaHQgY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgdG8gdGhlc2UgdGFyZ2V0IGNoYXJhY3RlcnMgY2hhbmdlIGJldHdlZW4gNC05eSBvZiBhZ2U/IAoKQXMgSSBhcmd1ZWQgZm9yIFN0dWR5IDIsIGlmIHRoZSBhZ2UgZ3JvdXAgZGlmZmVyZW5jZXMganVzdCBkZXNjcmliZWQgcmVmbGVjdCBfZGV2ZWxvcG1lbnRhbF8gZGlmZmVyZW5jZXMsIEkgd291bGQgZXhwZWN0IHRoYXQsIHdpdGggaW5jcmVhc2luZyBhZ2UsIGNoaWxkcmVuJ3MgcmVzcG9uc2VzIHdvdWxkIGJlY29tZSBpbmNyZWFzaW5nbHkgYWR1bHQtbGlrZS4gSW4gdGhpcyBjYXNlLCB0aGlzIHdvdWxkIG1lYW4gdGhhdCBhZ2Ugd291bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGluY3JlYXNlZCBkaWZmZXJlbnRhdGlvbiBvZiBhbmltYXRlIHZzLiBpbmFuaW1hdGUgY2hhcmFjdGVycyBpbiBjaGlsZHJlbidzIF9CT0RZXyBzY29yZXM7IGxvd2VyIF9IRUFSVF8gc2NvcmVzIChyZWdhcmRsZXNzIG9mIHRhcmdldCBjaGFyYWN0ZXIpOyBhbmQgaGlnaGVyIF9NSU5EXyBzY29yZXMsIHBhcnRpY3VsYXJseSBmb3IgYW5pbWF0ZSBiZWluZ3MuCgpgYGB7cn0KcGxvdHNfZDNfZGV2X2NoYXIgPC0gY2hhcmFjdGVyX2RldnBsb3QoCiAgZGZfc2NvcmVkX2FkID0gZDNfYWRfc2NvcmVkX2FkLCAKICBkZl9zY29yZWRfY2ggPSBmdWxsX2pvaW4oZDNfNzlfc2NvcmVkX2FkICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNzkiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGQzXzQ2X3Njb3JlZF9hZCAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNDYiKSkpLCAKICBkZl9hZ2UgPSBmdWxsX2pvaW4oZDNfNzkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzc5IikpLAogICAgICAgICAgICAgICAgICAgICBkM180NiAlPiUKICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNDYiKSkpKQpgYGAKCmBgYHtyfQpwbG90c19kM19kZXZfYW5pbSA8LSBjaGFyYWN0ZXJfZGV2cGxvdCgKICBkZl9zY29yZWRfYWQgPSBkM19hZF9zY29yZWRfYWQgJT4lCiAgICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogICAgbXV0YXRlKGNoYXJhY3RlciA9IGFuaW1faW5hbiksIAogIGRmX3Njb3JlZF9jaCA9IGZ1bGxfam9pbihkM183OV9zY29yZWRfYWQgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl83OSIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZDNfNDZfc2NvcmVkX2FkICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl80NiIpKSkgJT4lCiAgICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogICAgbXV0YXRlKGNoYXJhY3RlciA9IGFuaW1faW5hbiksIAogIGRmX2FnZSA9IGZ1bGxfam9pbihkM183OSAlPiUKICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNzkiKSksCiAgICAgICAgICAgICAgICAgICAgIGQzXzQ2ICU+JQogICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl80NiIpKSkpCmBgYAoKYGBge3J9CmZpZ3VyZTUuNV9jaGFyIDwtIHBsb3RzX2QzX2Rldl9jaGFyICsKICBsYWJzKHRpdGxlID0gIlN0dWR5IDM6IENoaWxkcmVuLCA0LTl5IChieSB0YXJnZXQgY2hhcmFjdGVyKSIpCgpmaWd1cmU1LjVfYW5pbSA8LSBwbG90c19kM19kZXZfYW5pbSArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSAzOiBDaGlsZHJlbiwgNC05eSAoYnkgYW5pbWFjeSBzdGF0dXMpIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCgiQW5pbWFjeSBzdGF0dXMiLCB2YWx1ZXMgPSBjb2xvcnNBSSwKICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQoZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZS5hZXMgPSBsaXN0KGFscGhhID0gMSkpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwoIkFuaW1hY3kgc3RhdHVzIiwgdmFsdWVzID0gY29sb3JzQUksCiAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQoZGlyZWN0aW9uID0gImhvcml6b250YWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxKSkpCgpmaWd1cmU1LjVfcGxvdHMgPC0gcGxvdF9ncmlkKGZpZ3VyZTUuNV9jaGFyLCBmaWd1cmU1LjVfYW5pbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIGxhYmVscyA9ICJBVVRPIikKYGBgCgpgYGB7cn0KZmlndXJlNS41X3Bsb3RzX2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTUuNV9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSA1LjU6IENoYW5nZXMgaW4gYXR0cmlidXRpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBhbW9uZyA0LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDMuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbmRpdmlkdWFsIGNoaWxkcmVuIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzOyBtZWFuIHNjb3JlcyBhbW9uZyBhZHVsdHMgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBkaWFtb25kcy4gRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscy4gTGluZXMgY29ycmVzcG9uZCB0byBzaW1wbGUgbGluZWFyIHJlZ3Jlc3Npb25zIChmb3JtdWxhOiBzY29yZSB+IGFnZSkuIiwgMTEwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxfQpnZ2RyYXcoZmlndXJlNS41X3Bsb3RzX2NhcCkKYGBgCgpgYGB7cn0KZDNfNDY3OV9zY29yZWRfYWQgPC0gZnVsbF9qb2luKGQzXzc5X3Njb3JlZF9hZCAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlMChzdWJpZCwgIl83OSIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQzXzQ2X3Njb3JlZF9hZCAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzQ2IikpKSAlPiUKICBsZWZ0X2pvaW4oZnVsbF9qb2luKGQzXzc5ICU+JSBtdXRhdGUoc3ViaWQgPSBwYXN0ZTAoc3ViaWQsICJfNzkiKSksCiAgICAgICAgICAgICAgICAgICAgICBkM180NiAlPiUgbXV0YXRlKHN1YmlkID0gcGFzdGUwKHN1YmlkLCAiXzQ2IikpKSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgbGVmdF9qb2luKGFuaW1fbG9va3VwKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGFnZSkpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gbGV2ZWxzKGQzX2FkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpKSwKICAgICAgICAgYWdlX2NlbnRlcmVkID0gc2NhbGUoYWdlLCBzY2FsZSA9IEYpKQoKY29udHJhc3RzKGQzXzQ2Nzlfc2NvcmVkX2FkJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9kdjA5CmNvbnRyYXN0cyhkM180Njc5X3Njb3JlZF9hZCRmYWN0b3IpIDwtIGNvbnRyYXN0c19jbnQzX2ZhY3Rvcgpjb250cmFzdHMoZDNfNDY3OV9zY29yZWRfYWQkYW5pbV9pbmFuKSA8LSBjb250cmFzdHNfc3VtMl9hbmltCmBgYAoKYGBge3J9CiMgcl9kM19kZXZzY29yZV9CT0RZIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCArCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgY2hhcmFjdGVyKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkM180Njc5X3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiQk9EWSIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kM19kZXZzY29yZV9CT0RZLCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZzY29yZV9CT0RZIikKCnJfZDNfZGV2c2NvcmVfQk9EWSA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2QzX2RldnNjb3JlX0JPRFkiKQoKc3VtbWFyeShyX2QzX2RldnNjb3JlX0JPRFkpCmBgYAoKYGBge3J9CiMgcl9kM19kZXZzY29yZV9IRUFSVCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQgKwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IGNoYXJhY3RlciksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDY3OV9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkhFQVJUIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2QzX2RldnNjb3JlX0hFQVJULCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZzY29yZV9IRUFSVCIpCgpyX2QzX2RldnNjb3JlX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2c2NvcmVfSEVBUlQiKQoKc3VtbWFyeShyX2QzX2RldnNjb3JlX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDNfZGV2c2NvcmVfTUlORCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfY2VudGVyZWQgKwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IGNoYXJhY3RlciksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDNfNDY3OV9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIk1JTkQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDNfZGV2c2NvcmVfTUlORCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDNfZGV2c2NvcmVfTUlORCIpCgpyX2QzX2RldnNjb3JlX01JTkQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kM19kZXZzY29yZV9NSU5EIikKCnN1bW1hcnkocl9kM19kZXZzY29yZV9NSU5EKQpgYGAKCmBgYHtyfQpyZWd0YWJfZDNfZGV2c2NvcmUgPC0gcmVndGFiX2RldnNjb3JlX2Z1bihyZWdfYm9keSA9IHJfZDNfZGV2c2NvcmVfQk9EWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2hlYXJ0ID0gcl9kM19kZXZzY29yZV9IRUFSVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX21pbmQgPSByX2QzX2RldnNjb3JlX01JTkQpCmBgYAoKYGBge3J9CnRhYmxlNS40IDwtIGRldnNjb3JlX3RhYmxlX2Z1bihyZWd0YWJfZGV2c2NvcmUgPSByZWd0YWJfZDNfZGV2c2NvcmUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9jaGFyYWN0ZXJzID0gOSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9uYW1lID0gIlRhYmxlIDUuNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1ZHlfbmFtZSA9ICJTdHVkeSAzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VfcmFuZ2UgPSAiNC0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbl9hZ2UgPSBtZWFuKGQzXzQ2Nzlfc2NvcmVkX2FkJGFnZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmEucm0gPSBUKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX2NvbXBhcmVfbGFiZWwgPSAiQW5pbWF0ZSBjaGFyYWN0ZXJzIHZzLiBHTSIpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQp0YWJsZTUuNApgYGAKClNvbWUsIGJ1dCBub3QgYWxsLCBvZiB0aGVzZSBwcmVkaWN0aW9ucyB3ZXJlIGJvcm4gb3V0IGFtb25nIHRoZSA0LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIHRoaXMgc3R1ZHkuIAoKQWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgaW4gdGhlIEJPRFkgZG9tYWluIGNvbmZvcm1lZCB0byB0aGUgZGV2ZWxvcG1lbnRhbCBzdG9yeSBzdWdnZXN0ZWQgYnkgdGhlIGdyb3VwIGRpZmZlcmVuY2VzIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uOiBfQk9EWV8gc2NvcmVzIHdlcmUgZ2VuZXJhbGx5IGhpZ2hlciBhbW9uZyBjaGlsZHJlbiB3aG8gYXNzZXNzZWQgb25lIG9mIHRoZSBhbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzIChlbGVwaGFudCwgZ29hdCwgbW91c2UsIGJpcmQsIG9yIGJlZXRsZSkgdGhhbiBhbW9uZyBjaGlsZHJlbiB3aG8gYXNzZXNzZWQgb25lIG9mIHRoZSBpbmFuaW1hdGUgdGFyZ2V0IGNoYXJhY3RlcnMgKHRlZGR5IGJlYXIsIGRvbGwsIHJvYm90LCBvciBjb21wdXRlcjsgc2VlIFRhYmxlIDUuNCwgIkFuaW1hdGUgY2hhcmFjdGVycyB2cy4gR00iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKSwgYW5kIHRoaXMgZGlmZmVyZW5jZSBpbmNyZWFzZWQgd2l0aCBhZ2UgKHNlZSBUYWJsZSA1LjQsICJJbnRlcmFjdGlvbiIgcm93IGZvciB0aGUgQk9EWSBkb21haW4sIGFuZCBGaWd1cmUgNS41LCBwYW5lbCBCLCBsZWZ0bW9zdCBwbG90KS4gVmlzdWFsIGluc3BlY3Rpb24gb2YgRmlndXJlIDUuNSwgcGFuZWwgQSwgc3VnZ2VzdHMgdGhhdCB0aGVzZSBnZW5lcmFsIHRyZW5kcyBoZWxkIHRydWUgZm9yIGFsbCBhbmltYXRlIHZzLiBpbmFuaW1hdGUgdGFyZ2V0IGNoYXJhY3RlcnMuIEEgcmVncmVzc2lvbiBhbmFseXNpcyBkaWQgbm8gcmV2ZWFsIGFueSByZWxpYWJsZSBvdmVyYWxsIGRpZmZlcmVuY2VzIGluIF9CT0RZXyBzY29yZXMgb3ZlciB0aGUgYWdlIHJhbmdlIChzZWUgVGFibGUgNS40LCAiRXhhY3QgYWdlIiByb3cgZm9yIHRoZSBCT0RZIGRvbWFpbikuIAoKVGhlIGdyb3VwIGRpZmZlcmVuY2VzIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uIHN1Z2dlc3RlZCB0aGF0IGF0dHJpYnV0aW9ucyBvZiBIRUFSVCBzaG91bGQgZGVjcmVhc2Ugd2l0aCBhZ2UuIEkgZGlkIG5vdCBvYnNlcnZlIGV2aWRlbmNlIG9mIHRoaXMgd2l0aGluIHRoaXMgc2FtcGxlIG9mIGNoaWxkcmVuLiBBcyBpbiB0aGUgQk9EWSBkb21haW4sIF9IRUFSVF8gc2NvcmVzIHdlcmUgZ2VuZXJhbGx5IGhpZ2hlciBhbW9uZyBjaGlsZHJlbiB3aG8gYXNzZXNzZWQgb25lIG9mIHRoZSBhbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzIHRoYW4gYW1vbmcgdGhvc2Ugd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzIChzZWUgVGFibGUgNS40LCAiQW5pbWF0ZSBjaGFyYWN0ZXJzIHZzLiBHTSIgcm93IGZvciB0aGUgSEVBUlQgZG9tYWluKSwgYnV0IHRoZXJlIHdlcmUgbm8gcmVsaWFibGUgYWdlLXJlbGF0ZWQgY2hhbmdlcyBpbiBjaGlsZHJlbidzIF9IRUFSVF8gc2NvcmVzIChzZWUgVGFibGUgNS40LCAiRXhhY3QgYWdlIiBhbmQgIkludGVyYWN0aW9uIiByb3dzIGZvciB0aGUgSEVBUlQgZG9tYWluLCwgYW5kIEZpZ3VyZSA1LjUsIHBhbmVsIEIsIGNlbnRlciBwbG90KS4gVmlzdWFsIGluc3BlY3Rpb24gb2YgRmlndXJlIDUuNSwgcGFuZWwgQSwgc3VnZ2VzdHMgdGhhdCB0aGlzIG1heSByZWZsZWN0IHZhcmlhYmlsaXR5IGFjcm9zcyBzcGVjaWZpYyB0YXJnZXQgY2hhcmFjdGVyczogRm9yIHNvbWUgY2hhcmFjdGVycyAobW9zdCBub3RhYmx5LCB0aGUgcm9ib3QpIGF0dHJpYnV0aW9ucyBvZiBIRUFSVCBhcHBlYXJlZCB0byBpbmNyZWFzZSBvdmVyIHRoaXMgYWdlIHJhbmdlICg0LTl5KSwgd2hpbGUgZm9yIG90aGVyIGNoYXJhY3RlcnMgKG1vc3Qgbm90YWJseSwgdGhlIGJlZXRsZSwgdGhlIGRvbGwsIGFuZCB0aGUgY29tcHV0ZXIpIGF0dHJpYnV0aW9ucyBhcHBlYXJlZCB0byBkZWNyZWFzZTsgZm9yIG1hbnkgb2YgdGhlIHRhcmdldCBjaGFyYWN0ZXJzIGluY2x1ZGVkIGluIHRoaXMgc3R1ZHkgdGhlcmUgYXBwZWFyZWQgdG8gYmUgbm8gc3lzdGVtYXRpYyBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyBpbiBhdHRyaWJ1dGlvbnMgb2YgSEVBUlQuCgpGaW5hbGx5LCBpbiBsaW5lIHdpdGggdGhlIGdyb3VwIGRpZmZlcmVuY2VzIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCBfTUlORF8gc2NvcmVzIGdlbmVyYWxseSBpbmNyZWFzZWQgd2l0aCBhZ2UgKHNlZSBUYWJsZSA1LjQsICJFeGFjdCBhZ2UiIHJvdyBmb3IgdGhlIE1JTkQgZG9tYWluKS4gQXMgaW4gdGhlIEJPRFkgYW5kIE1JTkQgZG9tYWlucywgX01JTkRfIHNjb3JlcyB3ZXJlIGdlbmVyYWxseSBoaWdoZXIgYW1vbmcgY2hpbGRyZW4gd2hvIGFzc2Vzc2VkIG9uZSBvZiB0aGUgYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyB0aGFuIGFtb25nIHRob3NlIHdobyBhc3Nlc3NlZCBvbmUgb2YgdGhlIGluYW5pbWF0ZSB0YXJnZXQgY2hhcmFjdGVycyAoc2VlIFRhYmxlIDUuNCwgIkJlZXRsZSB2cy4gR00iIHJvdyBmb3IgdGhlIE1JTkQgZG9tYWluKeKAlGJ1dCBhbHRob3VnaCBncm91cCBkaWZmZXJlbmNlcyBzdWdnZXN0ZWQgdGhhdCB0aGlzIGRpZmZlcmVuY2Ugc2hvdWxkIGluY3JlYXNlIHdpdGggYWdlLCB0aGVyZSB3YXMgbm8gZXZpZGVuY2UgZm9yIHRoaXMgaW50ZXJhY3Rpb24gYW1vbmcgY2hpbGRyZW4gKHNlZSBUYWJsZSA1LjQsICJJbnRlcmFjdGlvbiIgcm93IGZvciB0aGUgTUlORCBkb21haW4sIGFuZCBGaWd1cmUgNS41LCBwYW5lbCBCLCByaWdodG1vc3QgcGxvdCkuIEhvd2V2ZXIsIHZpc3VhbCBpbnNwZWN0aW9uIG9mIEZpZ3VyZSA1LjUsIHBhbmVsIEEsIHN1Z2dlc3RzIHRoYXQgdGhlcmUgd2VyZSB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgZm9yIHdob20gYXR0cmlidXRpb25zIG9mIE1JTkQgZGlkIF9OT1RfIGluY3JlYXNlIHdpdGggYWdlOiBuYW1lbHksIHRoZSB0d28gaW5lcnQgdG95cyAodGhlIHRlZGR5IGJlYXIgYW5kIHRoZSBkb2xsKS4gSW50ZXJlc3RpbmdseSwgdGhpcyBwbG90IHN1Z2dlc3RzIHRoYXQgdGhlIHR3byB0ZWNobm9sb2dpZXMgKHRoZSByb2JvdCBhbmQgdGhlIGNvbXB1dGVyKSBhcHBlYXIgdG8gYmUgYW1vbmcgdGhlIGNoYXJhY3RlcnMgZm9yIHdob20gYWdlLXJlbGF0ZWQgY2hhbmdlcyBpbiBhdHRyaWJ1dGlvbnMgb2YgTUlORCBtYXkgaGF2ZSBiZWVuIG1vc3QgZHJhbWF0aWPigJRidXQgdGhpcyBnZW5lcmFsIHRyZW5kIG9mIGluY3JlYXNpbmcgYXR0cmlidXRpb25zIG9mIE1JTkQgYWxzbyBhcHBlYXJzIHRvIGhhdmUgYXBwbGllZCB0byBhbGwgb2YgdGhlIGFuaW1hdGUgY2hhcmFjdGVycy4KCiMjIERpc2N1c3Npb24KCkFzIGluIFN0dWR5IDIsIGFkdWx0cyBpbiBTdHVkeSAzIGRpc3Rpbmd1aXNoZWQgdmVyeSBzdHJvbmdseSBiZXR3ZWVuIGFuaW1hdGUgYmVpbmdzICh0aGUgZWxlcGhhbnQsIGdvYXQsIG1vdXNlLCBiaXJkLCBhbmQgYmVldGxlKSB2cy4gaW5hbmltYXRlIG9iamVjdHMgKHRoZSB0ZWRkeSBiZWFyLCBkb2xsLCByb2JvdCwgYW5kIGNvbXB1dGVyKSBpbiB0ZXJtcyBvZiB0aGVpciBjYXBhY2l0aWVzIGluIHRoZSBCT0RZIGRvbWFpbjogVGhleSB3ZXJlIG5lYXJseSB1bmFuaW1vdXMgaW4gdGhlaXIgZGVuaWFsIG9mIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyB0byBpbmFuaW1hdGUgb2JqZWN0cywgd2hpbGUgYWxsIG9mIHRoZSBhbmltYXRlIGJlaW5ncyB3ZXJlIGdyYW50ZWQgYSBmYWlybHkgaGlnaCBkZWdyZWUgb2YgQk9EWSBhYmlsaXRpZXMgKG9uIGF2ZXJhZ2UpLiBMaWtld2lzZSwgaW4gdGhlIEhFQVJUIGRvbWFpbiwgYWR1bHRzIHdlcmUgbmVhcmx5IHVuYW5pbW91cyBpbiB0aGVpciBkZW5pYWwgb2Ygc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgdG8gaW5hbmltYXRlIG9iamVjdHMsIHdoaWxlIGFuaW1hdGUgYmVpbmdzIHdlcmUgcGVyY2VpdmVkIHRvIHZhcnkgaW4gdGhlaXIgSEVBUlQgYWJpbGl0aWVzLiBGaW5hbGx5LCBlY2hvaW5nIFN0dWR5IDEsIGFkdWx0cyBkaWQgbm90IG91dHJpZ2h0IGRlbnkgdGhlIHBvc3NpYmlsaXR5IHRoYXQgc29tZSBpbmFuaW1hdGUgb2JqZWN0cyBjb3VsZCBoYXZlIGEgZmFpciBkZWdyZWUgb2YgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVz4oCUYnV0IHRoZXkgZGlkIGdyYW50IHJlbGF0aXZlbHkgX21vcmVfIE1JTkQgYWJpbGl0aWVzIHRvIGFuaW1hdGUgYmVpbmdzLgoKU3R1ZHkgMyBhbGlnbmVkIHdpdGggU3R1ZHkgMiBpbiBwcm92aWRpbmcgZnVydGhlciBldmlkZW5jZSBmb3IgYSByb2J1c3QgZGlzdGluY3Rpb24gYmV0d2VlbiBhbmltYXRlcyB2cy4gaW5hbmltYXRlcyBpbiB0aGUgQk9EWSBkb21haW4gYW1vbmcgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiwgYW5kIGV4dGVuZGVkIHRoaXMgZGlzdGluY3Rpb24gYmFjayB0byB5b3VuZ2VyICg0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuKS4gQXMgaW4gU3R1ZHkgMiwgaG93ZXZlciwgdGhpcyBkaXN0aW5jdGlvbiBhcHBlYXJzIHRvIGhhdmUgaW5jcmVhc2VkIHdpdGggYWdlIHdpdGhpbiB0aGlzIHNhbXBsZSBvZiBjaGlsZHJlbuKAlGluIHRoaXMgY2FzZSwgZHJpdmVuIGJvdGggYnkgZGVjcmVhc2VzIGluIF9CT0RZXyBzY29yZXMgZm9yIGluYW5pbWF0ZSBvYmplY3RzIChhcyBpbiBTdHVkeSAyKSBhbmQgYnkgX2luY3JlYXNlc18gaW4gX0JPRFlfIHNjb3JlcyBmb3IgYW5pbWF0ZSBiZWluZ3MuIAoKQWdhaW4gZWNob2luZyBTdHVkeSAyLCB0aGUgYmlnZ2VzdCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMyB3ZXJlIGluIHRoZSBIRUFSVCBkb21haW4uIEluIHRoaXMgY2FzZSwgaXQgd2FzIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRvIGluYW5pbWF0ZSBvYmplY3Rz4oCUYW5kIGluIHBhcnRpY3VsYXIsIHRoZSByb2JvdOKAlHRoYXQgbWFya2VkIHRoZW0gYXMgZGlmZmVyZW50IGZyb20gYWR1bHN0IGluIHRoaXMgc3R1ZHkuIEludGVyZXN0aW5nbHksIHRoaXMgZGlmZmVyZW5jZSBiZXR3ZWVuICJzbmFwc2hvdHMiIG9mIG9sZGVyIGFuZCB5b3VuZ2VyIGNoaWxkcmVuIHZzLiBhZHVsdHMgd2FzIF9ub3RfIHJlZmxlY3RlZCBpbiBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyBfd2l0aGluXyB0aGUgY2hpbGQgc2FtcGxlOiBJZiBhbnl0aGluZywgX0hFQVJUXyBzY29yZXMgYW1vbmcgdGhlIHJlbGF0aXZlbHkgc21hbGwgc2FtcGxlIG9mIGNoaWxkcmVuIChuID0gYHIgZDNfNDY3OV9zY29yZWRfYWQgJT4lIGZpbHRlcihjaGFyYWN0ZXIgPT0gInJvYm90IikgJT4lIGRpc3RpbmN0KHN1YmlkKSAlPiUgbnJvdygpYCkgd2hvIGFzc2Vzc2VkIHRoZSByb2JvdCBhcHBlYXJlZCB0byBoYXZlIF9pbmNyZWFzZWRfIHdpdGggYWdlIChzZWUgRmlndXJlIDUuNSwgcGFuZWwgQSwgY2VudGVyIHBsb3QpLiBUb2dldGhlciB3aXRoIHRoZSByZXN1bHRzIG9mIFN0dWR5IDIsIHRoaXMgcHJvdmlkZXMgc29tZSBpbnRyaWd1aW5nIGV2aWRlbmNlIHRoYXQgY2hpbGRyZW4gKGF0IGxlYXN0IGNoaWxkcmVuIGluIHRoZSBTYW4gRnJhbmNpc2NvIEJheSBBcmVhKSBtYXkgaGF2ZSBxdWFsaXRhdGl2ZWx5IGRpZmZlcmVudCBiZWxpZWZzIHRoYW4gYWR1bHRzIGFib3V0IHRoZSBwb3NzaWJpbGl0eSBvZiBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyBpbiByb2JvdHMsIHBlcmhhcHMgcmVmbGVjdGluZyBjb2hvcnQgZGlmZmVyZW5jZXMgYXMgd2VsbCBhcyBhbnkgZGV2ZWxvcG1lbnRhbCBjaGFuZ2VzLiAoSSByZXR1cm4gdGhpcyB0aGlzIHBvc3NpYmlsaXR5IGluIENoYXB0ZXIgVkkgW1hYIENIRUNLIFRIQVQgVEhJUyBJUyBUUlVFXS4pCgpGaW5hbGx5LCBpbiBjb250cmFzdCB0byBTdHVkeSAyLCBTdHVkeSAzIGFsc28gc3VnZ2VzdGVkIHN1YnN0YW50aWFsIG9uZ29pbmcgZGV2ZWxvcG1lbnQgaW4gY2hpbGRyZW4ncyBhdHRyaWJ1dGlvbnMgb2YgTUlORCwgY2hhcmFjdGVyaXplZCBieSBkcmFtYXRpYyBpbmNyZWFzZXMgaW4gX01JTkRfIHNjb3JlcyB3aXRoIGFnZS4gTGlrZSBhZHVsdHMgaW4gdGhpcyBzdHVkeSAoYW5kIGxpa2UgYWR1bHRzIGFuZCA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWR5IDIpLCBjaGlsZHJlbiBvZiBhbGwgYWdlcyBzZWVtZWQgdG8gYmUgd2lsbGluZyB0byBhdHRyaWJ1dGUgYSBmYWlyIGRlZ3JlZSBvZiBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBhYmlsaXRpZXMgdG8gaW5hbmlhbXRlIGJlaW5ncy4gQWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgd2VyZSBkcml2ZW4gbm90IG9ubHkgYnkgaW5jcmVhc2VzIGluIHRoZXNlIGF0dHJpYnV0aW9ucyAod2hpY2ggcnVuIGNvdW50ZXItdHlwaWNhbCB0byB0aGUgYnJvYWRlc3Qgb3IgYmx1bnRlc3QgdmVyc2lvbiBvZiBhIGdlbmVyYWwgImFuaW1hdGUtaW5hbmlhbXRlIiBkaXN0aW5jdGlvbiksIGJ1dCBhbHNvIGJ5IGluY3JlYXNlcyBpbiBhdHRyaWJ1dGlvbnMgb2YgTUlORCB0byBfYW5pbWF0ZV8gYmVpbmdzIChzZWUgRmlndXJlIDUuNSkuCgoKIyBTdHVkeSA0OiBBIGZvY3VzIG9uIGVhcmx5IGNoaWxkaG9vZCAoNC01eSkKClN0dWR5IDQgYnVpbGRzIG9uIFN0dWR5IDMgYnkgcHJvdmlkaW5nIGEgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbiBvZiByZXByZXNlbnRhdGlvbnMgb2YgbWVudGFsIGxpZmUgaW4gdGhlIHByZXNjaG9vbCB5ZWFycyAoNC01eSkuIEluIHRoaXMgY2hhcHRlciwgSSBhZ2FpbiBmb2N1cyBvbiB3aGF0IHRoaXMgc3R1ZHkgY2FuIHJldmVhbCBhYm91dCBhdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGF0IHRoZSBlYXJsaWVzdCBwb2ludCBpbiBkZXZlbG9wbWVudCB0aGF0IEkgaGF2ZSBleGFtaW5lZCBzbyBmYXIsIGFuZCBjb21wYXJlIHRoZSBkZXBsb3ltZW50IG9mIHRoaXMgY29uY2VwdCBhbW9uZyB5b3VuZyBjaGlsZHJlbiB2cy4gYWR1bHRzLiAKClRvIHJldmlldywgaW4gU3R1ZHkgNCwgYHIgbnJvdyhkNF9hZF93aWRlKS8yYCBVUyBhZHVsdHMgYW5kIGByIG5yb3coZDRfNDZfd2lkZSkvMmAgVVMgY2hpbGRyZW4gYmV0d2VlbiB0aGUgYWdlcyBvZiBgciBzdW1tYXJ5KGQ0XzQ2JGFnZSlbIk1pbi4iXSAlPiUgcm91bmQoMikgJT4lIGZvcm1hdChuc21hbGwgPSAyKWAtYHIgc3VtbWFyeShkNF80NiRhZ2UpWyJNYXguIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgIHllYXJzIChtZWRpYW46IGByIHN1bW1hcnkoZDRfNDYkYWdlKVsiTWVkaWFuIl0gJT4lIHJvdW5kKDIpICU+JSBmb3JtYXQobnNtYWxsID0gMilgeSkgZWFjaCBhc3Nlc3NlZCB0d28gdGFyZ2V0IGNoYXJhY3RlcnMgb24gMTggbWVudGFsIGNhcGFjaXRpZXMsIHdpdGggYWxsIGFzcGVjdHMgb2YgdGhlIGV4cGVyaW1lbnRhbCBkZXNpZ24gdGFpbG9yZWQgdG8gYmUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgeW91bmdlc3QgYWdlIGdyb3VwLiBUaGlzIHN0dWR5IGVtcGxveWVkIHRoZSAiZWRnZSBjYXNlIiB2YXJpYW50IG9mIHRoZSBnZW5lcmFsIGFwcHJvYWNoLCB3aXRoIHBhcnRpY2lwYW50cyBhc3Nlc3NpbmcgYm90aCBhIGJlZXRsZSBvciBhIHJvYm90IGluIHNlcXVlbmNlICh3aXRoIG9yZGVyIGNvdW50ZXJiYWxhbmNlZCBhY3Jvc3MgcGFydGljaXBhbnRzKS4gKFNlZSBDaGFwdGVyIElJIGZvciBkZXRhaWxlZCBtZXRob2RzLikKCiMjIFNwZWNpYWwgbm90ZXMgb24gZGF0YSBwcm9jZXNzaW5nIGFuZCBhbmFseXNpcwoKQXMgaW4gU3R1ZGllcyAyIGFuZCAzLCB0byBmYWNpbGl0YXRlIGNvbXBhcmlzb24gYmV0d2VlbiBjaGlsZHJlbiBhbmQgYWR1bHRzIGluIFN0dWR5IDQsIEkgdXNlIGFkdWx0cycgX0JPRFlfLCBfSEVBUlRfLCBhbmQgX01JTkRfIHNjYWxlcyAoYXMgZGVzY3JpYmVkIGluIENoYXB0ZXIgSVYpIHRvIGFuYWx5emUgYm90aCBhZ2UgZ3JvdXBzLiBGb3IgYW5hbHlzZXMgdXNpbmcgc2NhbGVzIGRlcml2ZWQgZnJvbSBFRkEgb2YgY2hpbGRyZW4ncyBvd24gcmVzcG9uc2VzLCBzZWUgW1hYIEFQUEVORElYIEM/XS4KCiMjIFJlc3VsdHMKCmBgYHtyfQpkNF80NmFkX3Njb3JlZF9hZCA8LSBmdWxsX2pvaW4oZDRfYWRfc2NvcmVkX2FkLCBkNF80Nl9zY29yZWRfYWQpICU+JQogIGxlZnRfam9pbihhbmltX2xvb2t1cCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDRfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfZ3JvdXAgPSBmYWN0b3IoYWdlX2dyb3VwKSkKCmNvbnRyYXN0cyhkNF80NmFkX3Njb3JlZF9hZCRjaGFyYWN0ZXIpIDwtIGNvbnRyYXN0c19zdW1fZWRnZQpjb250cmFzdHMoZDRfNDZhZF9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQ0XzQ2YWRfc2NvcmVkX2FkJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQpjb250cmFzdHMoZDRfNDZhZF9zY29yZWRfYWQkYWdlX2dyb3VwKSA8LSBjb250cmFzdHNfZHVtMl9hZ2VncApgYGAKCiMjIyBDaGlsZHJlbiB2cy4gYWR1bHRzCgpgYGB7cn0KZDRfNDZhZF9tZWFucyA8LSBkNF80NmFkX3Njb3JlZF9hZCAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpCmBgYAoKU2VlIEZpZ3VyZSA1LjYsIHBhbmVsIEEsIGZvciBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NvcmVzIGZvciBib3RoIHRhcmdldCBjaGFyYWN0ZXJzIGFtb25nIHRoZSA0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgNC4gT24gdGhlIHdob2xlLCBwYXJ0aWNpcGFudHMnIGFzc2Vzc21lbnRzIG9mIHRoZXNlIHR3byAiZWRnZSBjYXNlcyIgaW4gU3R1ZHkgNCB3ZXJlIHNpbWlsYXIgdG8gdGhvc2Ugb2YgYWR1bHRzJyBhbmQgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAyLgoKQXMgaW4gU3R1ZHkgMiwgaW4gdGhlIGFnZ3JlZ2F0ZSwgYm90aCBjaGlsZHJlbiBhbmQgYWR1bHRzIHNlZW0gdG8gaGF2ZSBjb25zaWRlcmVkIHRoZSBiZWV0bGUgKHRoZSBhbmltYXRlIGNoYXJhY3RlcikgdG8gYmUgYSBiZWluZyB3aXRoIGEgbW9kZXJhdGVseSBoaWdoIGRlZ3JlZSBvZiBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgKG1lYW4gX0JPRFlfIHNjb3JlIGFtb25nIGFkdWx0czogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIkJPRFkiLCAiYWR1bHRzIiwgImJlZXRsZSIpYDsgYW1vbmcgY2hpbGRyZW46IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNDYiLCAiYmVldGxlIilgKSBhbmQgcGVyY2VwdHVhbC1jb2duaXRpdmUgY2FwYWNpdGllcyAobWVhbiBfTUlORF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiTUlORCIsICJhZHVsdHMiLCAiYmVldGxlIilgOyBhbW9uZyBjaGlsZHJlbjogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIk1JTkQiLCAiY2hpbGRyZW40NiIsICJiZWV0bGUiKWApLiBBZHVsdHMgZ3JhbnRlZCByZWxhdGl2ZWx5IGxpdHRsZSBpbiB0aGUgd2F5IG9mIHNvY2lhbC1lbW90aW9uYWwgYWJpbGl0aWVzIHRvIHRoZSBiZWV0bGUgKG1lYW4gX0hFQVJUXyBzY29yZSBhbW9uZyBhZHVsdHM6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJIRUFSVCIsICJhZHVsdHMiLCAiYmVldGxlIilgKSwgYnV04oCUd2l0aCB0aGUgb2xkZXIgY2hpbGRyZW4gaW4gU3R1ZHkgMuKAlGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgdGVuZGVkIHRvIGhvdmVyIGFyb3VuZCB0aGUgbWlkcG9pbnQgb2YgdGhlIHNjYWxlIChtZWFuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiSEVBUlQiLCAiY2hpbGRyZW40NiIsICJiZWV0bGUiKWApLgoKRm9yIHRoZSByb2JvdCAodGhlIGluYW5pbWF0ZSBjaGFyYWN0ZXIpIGJvdGggYWR1bHRzIGFuZCBjaGlsZHJlbiwgaW4gdGhlIGFnZ3JlZ2F0ZSwgaW5kaWNhdGVkIGEgbW9kZXJhdGUgZGVncmVlIG9mIHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyAobWVhbiBfTUlORF8gc2NvcmUgYW1vbmcgYWR1bHRzOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiTUlORCIsICJhZHVsdHMiLCAicm9ib3QiKWA7IGFtb25nIGNoaWxkcmVuOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiTUlORCIsICJjaGlsZHJlbjQ2IiwgInJvYm90IilgKSwgYW5kIGFwcGVhcmVkIHRvIGFncmVlIHRoYXQgdGhlIHJvYm90IGhhZCBsZXNzIGluIHRoZSB3YXkgb2YgcGh5c2lvbG9naWNhbCBzZW5zYXRpb25zIGFuZCBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyB0aGFuIHRoZSBiZWV0bGUuIEhvd2V2ZXIsIGVjaG9pbmcgdGhlIHJlc3VsdHMgb2YgU3R1ZHkgMiwgdGhlIHR3byBhZ2UgZ3JvdXBzIGFwcGVhciB0byBoYXZlIGRpdmVyZ2VkIGluIHRoZWlyIGFzc2Vzc21lbnRzIG9mIHRoZSBhYnNvbHV0ZSBkZWdyZWUgb2YgQk9EWSBhbmQgSEVBUlQgdGhhdCB0aGV5IHdlcmUgd2lsbGluZyB0byBncmFudCB0aGUgcm9ib3Q6IEFkdWx0cyBncmFudGVkIHZlcnkgbGl0dGxlIGluIGVpdGhlciBkb21haW4gKG1lYW4gX0JPRFlfIHNjb3JlOiBgciBzY29yZV9tZWFuX3ByaW50X2Z1bihkNF80NmFkX21lYW5zLCAiQk9EWSIsICJhZHVsdHMiLCAicm9ib3QiKWA7IG1lYW4gX0hFQVJUXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIkhFQVJUIiwgImFkdWx0cyIsICJyb2JvdCIpYCksIHdoaWxlIGNoaWxkcmVuIGdyYW50ZWQgbWlkZGxpbmcgYWJpbGl0aWVzIGluIGJvdGggZG9tYWlucyAobWVhbiBfQk9EWV8gc2NvcmU6IGByIHNjb3JlX21lYW5fcHJpbnRfZnVuKGQ0XzQ2YWRfbWVhbnMsICJCT0RZIiwgImNoaWxkcmVuNDYiLCAicm9ib3QiKWA7IG1lYW4gX0hFQVJUXyBzY29yZTogYHIgc2NvcmVfbWVhbl9wcmludF9mdW4oZDRfNDZhZF9tZWFucywgIkhFQVJUIiwgImNoaWxkcmVuNDYiLCAicm9ib3QiKWApLgoKYGBge3J9CmZpZ3VyZTUuNl9wbG90cyA8LSBjaGFyYWN0ZXJfbXVsdGlwbG90X2FnZSgKICBkZl9zY29yZWQgPSBmdWxsX2pvaW4oZDRfYWRfc2NvcmVkX2FkLCBkNF80Nl9zY29yZWRfYWQpLCAKICBzaG93X2FuaW1fYnlfc3ViaiA9IFQsCiAgYWdlX2xldmVscyA9IGMoImNoaWxkcmVuNDYiLCAiYWR1bHRzIiksCiAgYWdlX2xhYmVscyA9IGMoIkNoaWxkcmVuLCA0LTV5IiwgIkFkdWx0cyIpLAogIHBsb3RfbWFyZ191cHBlciA9IC00NSwgYXhpc19oZWlnaHQgPSAwLjA5KQpgYGAKCmBgYHtyfQpmaWd1cmU1LjZfcGxvdHNfY2FwIDwtIGFkZF9zdWIoZmlndXJlNS42X3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIDUuNjogQXR0cmlidXRpb25zIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBhbW9uZyBjaGlsZHJlbiAoNC01eSkgYW5kIGFkdWx0cyBpbiBTdHVkeSA0LiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gUGxvdHMgaW5jbHVkZSAoQSkgc2NvcmVzIGJ5IHRhcmdldCBjaGFyYWN0ZXIsIGFuZCAoQikgZGlzdHJpYnV0aW9ucyBvZiBzY29yZXMuIEluZGl2aWR1YWwgcGFydGljaXBhbnRzIGFyZSBwbG90dGVkIGFzIHNtYWxsLCB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYnkgY2hhcmFjdGVyIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIiwgOTApLCB4ID0gMCwgaGp1c3QgPSAwKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuOH0KZ2dkcmF3KGZpZ3VyZTUuNl9wbG90c19jYXApCmBgYAoKYGBge3J9CiMgcl9kNF9kZXZncF9CT0RZIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9ncm91cCwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkNF80NmFkX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiQk9EWSIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kNF9kZXZncF9CT0RZLCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZncF9CT0RZIikKCnJfZDRfZGV2Z3BfQk9EWSA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldmdwX0JPRFkiKQoKc3VtbWFyeShyX2Q0X2RldmdwX0JPRFkpCmBgYAoKYGBge3J9CiMgcl9kNF9kZXZncF9IRUFSVCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkhFQVJUIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2Q0X2RldmdwX0hFQVJULCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZncF9IRUFSVCIpCgpyX2Q0X2RldmdwX0hFQVJUIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2Z3BfSEVBUlQiKQoKc3VtbWFyeShyX2Q0X2RldmdwX0hFQVJUKQpgYGAKCmBgYHtyfQojIHJfZDRfZGV2Z3BfTUlORCA8LSBicm0oc2NvcmUgfiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZhZF9zY29yZWRfYWQgJT4lCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIk1JTkQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDRfZGV2Z3BfTUlORCwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2Z3BfTUlORCIpCgpyX2Q0X2RldmdwX01JTkQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZncF9NSU5EIikKCnN1bW1hcnkocl9kNF9kZXZncF9NSU5EKQpgYGAKCmBgYHtyfQpyZWd0YWJfZDRfZGV2Z3AgPC0gcmVndGFiX2RldmdwX2Z1bigKICByZWdfYm9keSA9IHJfZDRfZGV2Z3BfQk9EWSwgCiAgcmVnX2hlYXJ0ID0gcl9kNF9kZXZncF9IRUFSVCwKICByZWdfbWluZCA9IHJfZDRfZGV2Z3BfTUlORCwKICBhZ2VfbGV2ZWxzID0gYygiYWdlX2dyb3VwX2NoaWxkIiksIAogIGFnZV9sYWJlbHMgPSBjKCJDaGlsZHJlbiB2cy4gYWR1bHRzIikpCmBgYAoKYGBge3J9CnRhYmxlNS41IDwtIGRldmdwX3RhYmxlX2Z1bihyZWd0YWJfZGV2Z3AgPSByZWd0YWJfZDRfZGV2Z3AsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9jaGFyYWN0ZXJzID0gMiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9uYW1lID0gIlRhYmxlIDUuNSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1ZHlfbmFtZSA9ICJTdHVkeSA0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSAiNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9hZ2VfZ3JvdXBzID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY29tcGFyZV9sYWJlbCA9ICJCZWV0bGUgdnMuIEdNIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS41CmBgYAoKQSBzZXJpZXMgb2YgQmF5ZXNpYW4gcmVncmVzc2lvbiBhbmFseXNlcyBjb25maXJtZWQgdGhlc2Ugb3ZlcmFsbCBpbXByZXNzaW9ucywgeWllbGRpbmcgcmVtYXJrYWJseSBzaW1pbGFyIHJlc3VsdHMgdG8gdGhlIHBhcmFsbGVsIGNvbXBhcmlzb24gYmV0d2VlbiA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMi4gCgpBcyBpbiBTdHVkeSAyLCBjaGlsZHJlbidzIF9CT0RZXyBzY29yZXMgd2VyZSBnZW5lcmFsbHkgaGlnaGVyIHRoYW4gYWR1bHRzJyAoc2VlIFRhYmxlIDUuNSwgIkNoaWxkcmVuIHZzLiBhZHVsdHMiIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gVGhpcyBhcHBlYXJzIHRvIGhhdmUgYmVlbiBwYXJ0aWN1bGFybHkgdHJ1ZSBmb3IgdGhlIHJvYm90IChzZWUgRmlndXJlIDUuNiwgdG9wIHJvdyk7IGFzIGEgcmVzdWx0LCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBiZWV0bGUgYW5kIHRoZSByb2JvdCB3YXMgYXR0ZW51YXRlZCBhbW9uZyBjaGlsZHJlbiwgcmVsYXRpdmUgdG8gYWR1bHRzIChzZWUgVGFibGUgNS41LCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gQWdhaW4sIGFzIGluIFN0dWR5IDIsIGNoaWxkcmVuJ3MgX0hFQVJUXyBzY29yZXMgd2VyZSBhbHNvIGhpZ2hlciB0aGFuIGFkdWx0cycgKHNlZSBUYWJsZSA1LjUsICJDaGlsZHJlbiB2cy4gYWR1bHRzIiByb3cgZm9yIHRoZSBIRUFSVCBkb21haW4sIGFuZCBGaWd1cmUgNS42LCBtaWRkbGUgcm93KS4gSW4gU3R1ZHkgNCwgdGhpcyBkaWZmZXJlbmNlIGJldHdlZW4gY2hpbGRyZW4gYW5kIGFkdWx0cyB3YXMgc2xpZ2h0bHkgbW9yZSBwcm9ub3VuY2VkIGZvciB0aGUgcm9ib3QgdGhhbiB0aGUgYmVldGxlIChzZWUgVGFibGUgNS41LCAiSW50ZXJhY3Rpb24iIHJvdyBmb3IgdGhlIEJPRFkgZG9tYWluKS4gQW5kIHlldCBhZ2FpbiwgYXMgaW4gU3R1ZHkgMiwgdGhlcmUgd2VyZSBubyBzdWJzdGFudGlhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gdGhlaXIgX01JTkRfIHNjb3JlcyAoc2VlIFRhYmxlIDUuNSBhbmQgRmlndXJlIDUuNiwgYm90dG9tIHJvdykKCiMjIyBBZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyBiZXR3ZWVuIDQtNXkKCkhlcmUsIEkgZXhwbG9yZSBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyB3aXRoaW4gdGhlIGNoaWxkIHNhbXBsZTogSG93IG1pZ2h0IGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIGNoYW5nZSBvdmVyIHRoZSBhZ2UgcmFuZ2UgaW5jbHVkZWQgaW4gdGhpcyBzdHVkeT8gVW5saWtlIFN0dWRpZXMgMi0zLCB3aGljaCBlYWNoIGluY2x1ZGVkIGEgcmVsYXRpdmVseSB3aWRlIGFnZSByYW5nZSAoNy05eSBpbiBTdHVkeSAyOyA0LTl5IGluIFN0dWR5IDMpLCB0aGUgYWdlIHJhbmdlIGluY2x1ZGVkIGluIFN0dWR5IDQgd2FzIHJlbGF0aXZlbHkgbmFycm93LCByZW5kZXJpbmcgaXQgbGVzcyBsaWtlbHkgdG8gb2JzZXJ2ZSBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcy4gTm9uZXRoZWxlc3MsIGJhc2VkIG9uIHRoZSBhZ2UgZ3JvdXAgY29tcGFyaXNvbnMgZGlzY3Vzc2VkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9ucywgSSBleHBlY3RlZCB0aGF0IHRoZSBtb3N0IGxpa2VseSBhZ2UtcmVsYXRlZCBkaWZmZXJlbmNlcyB0byBlbWVyZ2Ugd291bGQgYmUgZm9yIGluY3JlYXNlcyBpbiBhZ2UgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGxvd2VyIF9CT0RZXyBzY29yZXMsIHBhcnRpY3VsYXJseSBmb3IgdGhlIHJvYm90OyBhbmQgd2l0aCBsb3dlciBfSEVBUlRfIHNjb3JlcyBmb3IgYm90aCB0YXJnZXQgY2hhcmFjdGVycy4KCmBgYHtyfQpwbG90c19kNF9kZXYgPC0gY2hhcmFjdGVyX2RldnBsb3QoZGZfc2NvcmVkX2FkID0gZDRfYWRfc2NvcmVkX2FkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmX3Njb3JlZF9jaCA9IGQ0XzQ2X3Njb3JlZF9hZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZl9hZ2UgPSBkNF80NikKYGBgCgpgYGB7cn0KZmlndXJlNS43IDwtIHBsb3RzX2Q0X2RldiArCiAgbGFicyh0aXRsZSA9ICJTdHVkeSA0OiBDaGlsZHJlbiwgNC01eSIpCmBgYAoKYGBge3J9CmZpZ3VyZTUuN19wbG90c19jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjcsIHN0cl93cmFwKCJGaWd1cmUgNS43OiBDaGFuZ2VzIGluIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYW1vbmcgNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSA0LiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBjaGlsZHJlbiBhcmUgcGxvdHRlZCBhcyBzbWFsbCwgdHJhbnNsdWNlbnQgY2lyY2xlczsgbWVhbiBzY29yZXMgYW1vbmcgYWR1bHRzIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIExpbmVzIGNvcnJlc3BvbmQgdG8gc2ltcGxlIGxpbmVhciByZWdyZXNzaW9ucyAoZm9ybXVsYTogc2NvcmUgfiBhZ2UpLiIsIDExMCksIHggPSAwLCBoanVzdCA9IDApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC41fQpnZ2RyYXcoZmlndXJlNS43X3Bsb3RzX2NhcCkKYGBgCgpgYGB7cn0KZDRfNDZhZ2Vfc2NvcmVkX2FkIDwtIGQ0XzQ2X3Njb3JlZF9hZCAlPiUKICBsZWZ0X2pvaW4oZDRfNDYgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBsZXZlbHMoZDRfYWRfc2NvcmVkX2FkJGNoYXJhY3RlcikpLAogICAgICAgICBhZ2VfY2VudGVyZWQgPSBzY2FsZShhZ2UsIHNjYWxlID0gRikpCgpjb250cmFzdHMoZDRfNDZhZ2Vfc2NvcmVkX2FkJGNoYXJhY3RlcikgPC0gY29udHJhc3RzX3N1bV9lZGdlCmNvbnRyYXN0cyhkNF80NmFnZV9zY29yZWRfYWQkZmFjdG9yKSA8LSBjb250cmFzdHNfY250M19mYWN0b3IKY29udHJhc3RzKGQ0XzQ2YWdlX3Njb3JlZF9hZCRhbmltX2luYW4pIDwtIGNvbnRyYXN0c19zdW0yX2FuaW0KYGBgCgpgYGB7cn0KIyByX2Q0X2RldnNjb3JlX0JPRFkgPC0gYnJtKHNjb3JlIH4gYW5pbV9pbmFuICogYWdlX2NlbnRlcmVkICsgKDEgfCBzdWJpZCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDRfNDZhZ2Vfc2NvcmVkX2FkICU+JQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJCT0RZIiksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlcyA9IDQsIGNvbnRyb2wgPSBsaXN0KGFkYXB0X2RlbHRhID0gMC45OSkpCiMgCiMgc2F2ZVJEUyhyX2Q0X2RldnNjb3JlX0JPRFksICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX0JPRFkiKQoKcl9kNF9kZXZzY29yZV9CT0RZIDwtIHJlYWRSRFMoIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfZDRfZGV2c2NvcmVfQk9EWSIpCgpzdW1tYXJ5KHJfZDRfZGV2c2NvcmVfQk9EWSkKYGBgCgpgYGB7cn0KIyByX2Q0X2RldnNjb3JlX0hFQVJUIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCArICgxIHwgc3ViaWQpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2YWdlX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiSEVBUlQiKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzID0gNCwgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSkKIyAKIyBzYXZlUkRTKHJfZDRfZGV2c2NvcmVfSEVBUlQsICIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX0hFQVJUIikKCnJfZDRfZGV2c2NvcmVfSEVBUlQgPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZzY29yZV9IRUFSVCIpCgpzdW1tYXJ5KHJfZDRfZGV2c2NvcmVfSEVBUlQpCmBgYAoKYGBge3J9CiMgcl9kNF9kZXZzY29yZV9NSU5EIDwtIGJybShzY29yZSB+IGFuaW1faW5hbiAqIGFnZV9jZW50ZXJlZCArICgxIHwgc3ViaWQpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQ0XzQ2YWdlX3Njb3JlZF9hZCAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiTUlORCIpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMgPSA0LCBjb250cm9sID0gbGlzdChhZGFwdF9kZWx0YSA9IDAuOTkpKQojIAojIHNhdmVSRFMocl9kNF9kZXZzY29yZV9NSU5ELCAiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9kNF9kZXZzY29yZV9NSU5EIikKCnJfZDRfZGV2c2NvcmVfTUlORCA8LSByZWFkUkRTKCIuL3N0b3JlZC9icm1zX21vZGVscy9yX2Q0X2RldnNjb3JlX01JTkQiKQoKc3VtbWFyeShyX2Q0X2RldnNjb3JlX01JTkQpCmBgYAoKYGBge3J9CnJlZ3RhYl9kNF9kZXZzY29yZSA8LSByZWd0YWJfZGV2c2NvcmVfZnVuKHJlZ19ib2R5ID0gcl9kNF9kZXZzY29yZV9CT0RZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfaGVhcnQgPSByX2Q0X2RldnNjb3JlX0hFQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfbWluZCA9IHJfZDRfZGV2c2NvcmVfTUlORCkKYGBgCgpgYGB7cn0KdGFibGU1LjYgPC0gZGV2c2NvcmVfdGFibGVfZnVuKHJlZ3RhYl9kZXZzY29yZSA9IHJlZ3RhYl9kNF9kZXZzY29yZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2NoYXJhY3RlcnMgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWUgPSAiVGFibGUgNS42IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeV9uYW1lID0gIlN0dWR5IDQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9yYW5nZSA9ICI0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oZDRfNDYkYWdlLCBuYS5ybSA9IFQpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY29tcGFyZV9sYWJlbCA9ICJCZWV0bGUgdnMuIEdNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmVmX3N1YmlkID0gVCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS42CmBgYAoKSG93ZXZlciwgbmVpdGhlciBvZiB0aGVzZSBkaWZmZXJlbmNlcyB3YXMgcHJlc2VudCBpbiB0aGlzIHNhbXBsZSBvZiBjaGlsZHJlbi4gSW5zdGVhZCwgdGhlIG9ubHkgcmVsaWFibGUgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZSB0byBlbWVyZ2Ugd2FzIGFuIGluY3JlYXNpbmcgZGlmZmVyZW50aWF0aW9uIG9mIHRoZSBiZWV0bGUgYW5kIHRoZSByb2JvdCBpbiB0aGUgQk9EWSBkb21haW4sIGRyaXZlbuKAlHN1cnByaXNpbmdseeKAlGJ5IGFuIF9pbmNyZWFzZV8gaW4gX0JPRFlfIHNjb3JlcyBmb3IgdGhlIGJlZXRsZSAocmF0aGVyIHRoYW4gYSBkZWNyZWFzZSBpbiBfQk9EWV8gc2NvcmVzIGZvciB0aGUgcm9ib3QpLiBTZWUgRmlndXJlIDUuNywgYW5kIHNlZSBUYWJsZSA1LjYgZm9yIHRoZSBmdWxsIHJlc3VsdHMgb2YgdGhlc2UgcmVncmVzc2lvbiBhbmFseXNlcy4gCgojIyBEaXNjdXNzaW9uCgpBZHVsdHMnIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgdG8gdGhlIHR3byAiZWRnZSBjYXNlcyIgaW5jbHVkZWQgaW4gU3R1ZHkgNCB3ZXJlIHZlcnkgc2ltaWxhciB0byB0aGVpciBhdHRyaWJ1dGlvbnMgaW4gU3R1ZHkgMi4gQXMgaW4gcHJldmlvdXMgc3R1ZGllcywgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhbmltYXRlcyB2cy4gaW5hbmltYXRlcyB3YXMgZHJhbWF0aWMgaW4gdGhlIEJPRFkgZG9tYWluLCBzbWFsbGVyIGluIHRoZSBIRUFSVCBkb21haW4sIGFuZCBpbiB0aGlzIGNhc2Ugbm9uLWV4aXN0ZW50IGluIHRoZSBNSU5EIGRvbWFpbi4gCgpTdHVkeSA0IGFsaWduZWQgd2l0aCBTdHVkeSAzIGluIHByb3ZpZGluZyBldmlkZW5jZSBmb3IgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIGluIEJPRFkgYXR0cmlidXRpb25zIHdpdGhpbiB0aGUgeW91bmdlc3Qgc2FtcGxlIHRlc3RlZCBpbiB0aGVzZSBzdHVkaWVzICg0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuKS4gQXMgaW4gcHJldmlvdXMgc3R1ZGllcywgdGhpcyBkaXN0aW5jdGlvbiBhcHBlYXJzIHRvIGhhdmUgaW5jcmVhc2VkIHdpdGggYWdl4oCUYnV0IGluIGNvbnRyYXN0IHRvIHByZXZpb3VzIHN0dWRpZXMsIHRoaXMgYXBwZWFycyB0byBoYXZlIGJlZW4gZHJpdmVuIHByaW1hcmltbHkgYnkgaW5jcmVhc2VzIGluIF9CT0RZXyBzY29yZXMgZm9yIHRoZSBhbmltYXRlIGNoYXJhY3RlciAodGhlIGJlZXRsZSkuIAoKTGlrZSBjaGlsZHJlbiBpbiBTdHVkaWVzIDIgYW5kIDMsIHRoZSA0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIGluIHRoaXMgc3R1ZHkgZ2VuZXJhbGx5IGF0dHJpYnV0ZWQgZ3JlYXRlciBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyAoSEVBUlQpIHRvIHRoZXNlIGNoYXJhY3RlcnMsIHJlbGF0aXZlIHRvIGFkdWx0cy4gRmluYWxseSwgbGlrZSB0aGUgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkeSAyICh3aG8gYWxzbyBhc3Nlc3NlZCB0aGVzZSAiZWRnZSBjYXNlcyIpLCB0aGUgNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiBkZW1vbnN0cmF0ZWQgcmF0aGVyIGFkdWx0LWxpa2UgYXR0cmlidXRpb25zIGluIHRoZSBNSU5EIGRvbWFpbi4gVGhlIGxhY2sgb2YgYWdlLXJlbGF0ZWQgZGlmZmVyZW5jZXMgd2l0aGluIHRoZSBjaGlsZCBzYW1wbGUgaW4gdGhlIGRvbWFpbnMgb2YgSEVBUlQgYW5kIE1JTkQgc2hvdWxkIGJlIGludGVycHJldGVkIHdpdGggc29tZSBjYXV0aW9uLCBnaXZlbiB0aGUgc21hbGxlciBzYW1wbGUgc2l6ZSBhbmQgbW9yZSBsaW1pdGVkIGFnZSByYW5nZSBvZiBjaGlsZHJlbiBpbiBTdHVkeSA0IGNvbXBhcmVkIHRvIFN0dWRpZXMgMiBhbmQgMy4gCgoKIyBHZW5lcmFsIGRpc2N1c3Npb24KCmBgYHtyfQpzY29yZXNfYWxsX2NlbnRlcmVkX2xvbmcgPC0gc2NvcmVzX2FsbCAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIGxlZnRfam9pbihzY29yZXNfYWxsICU+JSAKICAgICAgICAgICAgICBkaXN0aW5jdChzdHVkeSwgYWdlX2dyb3VwLCBzdWJpZCwgY2hhcmFjdGVyKSAlPiUgCiAgICAgICAgICAgICAgY291bnQoc3R1ZHksIGFnZV9ncm91cCkgJT4lCiAgICAgICAgICAgICAgcmVuYW1lKG5fZGF0YXBvaW50cyA9IG4pKSAlPiUKICBtdXRhdGUoc2NvcmVfY2VudGVyZWQwLjUgPSBzY29yZSAtIDAuNSwKICAgICAgICAgZGVzaWduID0gY2FzZV93aGVuKAogICAgICAgICAgIHN0dWR5ICVpbiUgYygiU3R1ZHkgMWEiLCAiU3R1ZHkgMWIiLCAiU3R1ZHkgMiIpIH4gCiAgICAgICAgICAgICAiZWRnZSBjYXNlIChiZXR3ZWVuLVNzKSIsCiAgICAgICAgICAgc3R1ZHkgJWluJSBjKCJTdHVkeSAxYyIsICJTdHVkeSA0IikgfiAKICAgICAgICAgICAgICJlZGdlIGNhc2UgKHdpdGhpbi1TcykiLAogICAgICAgICAgIHN0dWR5ICVpbiUgYygiU3R1ZHkgMWQiLCAiU3R1ZHkgMyIpIH4gCiAgICAgICAgICAgICAiZGl2ZXJzZSBjaGFyYWN0ZXJzIChiZXR3ZWVuLVNzKSIpLAogICAgICAgICBkZXNpZ24gPSBmYWN0b3IoZGVzaWduLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImVkZ2UgY2FzZSAoYmV0d2Vlbi1TcykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWRnZSBjYXNlICh3aXRoaW4tU3MpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdmVyc2UgY2hhcmFjdGVycyAoYmV0d2Vlbi1TcykiKSkpCgpzY29yZXNfYWxsX2NlbnRlcmVkX3dpZGUgPC0gc2NvcmVzX2FsbF9jZW50ZXJlZF9sb25nICU+JQogIHNlbGVjdCgtc2NvcmUpICU+JQogIHNwcmVhZChmYWN0b3IsIHNjb3JlX2NlbnRlcmVkMC41KQoKIyBjb250cmFzdHMoc2NvcmVzX2FsbF9jZW50ZXJlZF9sb25nJGFnZV9ncm91cCkKY29udHJhc3RzKHNjb3Jlc19hbGxfY2VudGVyZWRfbG9uZyRmYWN0b3IpIDwtIGNvbnRyYXN0c19kdW0zX2ZhY3Rvcgpjb250cmFzdHMoc2NvcmVzX2FsbF9jZW50ZXJlZF9sb25nJGFuaW1faW5hbikgPC0gY29udHJhc3RzX3N1bTJfYW5pbQoKIyBjb250cmFzdHMoc2NvcmVzX2FsbF9jZW50ZXJlZF93aWRlJGFnZV9ncm91cCkKY29udHJhc3RzKHNjb3Jlc19hbGxfY2VudGVyZWRfd2lkZSRhbmltX2luYW4pIDwtIGNvbnRyYXN0c19zdW0yX2FuaW0KYGBgCgpgYGB7cn0Kc2NvcmVzX3N1bSA8LSBzY29yZXNfYWxsX2NlbnRlcmVkX3dpZGUgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwLCBzdHVkeSwgYW5pbV9pbmFuKSAlPiUKICBzdW1tYXJpc2UobWVhbl9CID0gbWVhbihCT0RZKSwKICAgICAgICAgICAgbWVhbl9IID0gbWVhbihIRUFSVCksCiAgICAgICAgICAgIG1lYW5fTSA9IG1lYW4oTUlORCksCiAgICAgICAgICAgICMgdmFyX0IgPSB2YXIoQk9EWSksCiAgICAgICAgICAgICMgdmFyX0ggPSB2YXIoSEVBUlQpLAogICAgICAgICAgICAjIHZhcl9NID0gdmFyKE1JTkQpLAogICAgICAgICAgICBzZF9CID0gc2QoQk9EWSksCiAgICAgICAgICAgIHNkX0ggPSBzZChIRUFSVCksCiAgICAgICAgICAgIHNkX00gPSBzZChNSU5EKSwKICAgICAgICAgICAgcl9CSCA9IGNvcihCT0RZLCBIRUFSVCksCiAgICAgICAgICAgIHJfQk0gPSBjb3IoQk9EWSwgTUlORCksCiAgICAgICAgICAgIHJfSE0gPSBjb3IoSEVBUlQsIE1JTkQpKSAlPiUKICBmaWx0ZXIoIWdyZXBsKCJTdHVkeSAxIiwgc3R1ZHkpKSAlPiUKICBzZWxlY3Qoc3R1ZHksIGFuaW1faW5hbiwgYWdlX2dyb3VwLCAKICAgICAgICAgZW5kc193aXRoKCJfQiIpLCBlbmRzX3dpdGgoIl9IIiksIGVuZHNfd2l0aCgiX00iKSwKICAgICAgICAgc3RhcnRzX3dpdGgoInJfIikpICU+JQogIGFycmFuZ2Uoc3R1ZHksIGFuaW1faW5hbiwgYWdlX2dyb3VwKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KdGFibGU1LjcgPC0gc2NvcmVzX3N1bSAlPiUKICBzZWxlY3QoLXN0dWR5KSAlPiUKICByZW5hbWUoIkJPRFkgdnMuIEhFQVJUIiA9IHJfQkgsIAogICAgICAgICAiQk9EWSB2cy4gTUlORCIgPSByX0JNLCAKICAgICAgICAgIkhFQVJUIHZzLiBNSU5EIiA9IHJfSE0sCiAgICAgICAgICJBbmltYWN5IHN0YXR1cyIgPSBhbmltX2luYW4sIAogICAgICAgICAiQWdlIGdyb3VwIiA9IGFnZV9ncm91cCkgJT4lCiAgcmVuYW1lX2F0KHZhcnMoc3RhcnRzX3dpdGgoIm1lYW5fIiksIHN0YXJ0c193aXRoKCJzZF8iKSksCiAgICAgICAgICAgIGZ1bnMoZ3N1YigiXy4qJCIsICIiLCAuKSkpICU+JQogIGthYmxlKGRpZ2l0cyA9IDIsCiAgICAgICAgY2FwdGlvbiA9ICJUYWJsZSA1Ljc6IFN1bW1hcnkgc3RhdGlzdGljcyBmb3IgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHNjb3JlcyBpbiBTdHVkaWVzIDItNCwgb3JnYW5pemVkIGJ5IHRoZSBhZ2UgZ3JvdXAgb2YgcGFydGljaXBhbnRzIGFuZCB0aGUgYW5pbWFjeSBzdGF0dXMgb2YgdGFyZ2V0IGNoYXJhY3RlcnMuIikgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGNvbHVtbl9zcGVjKHNlcSgzLCA5LCAyKSwgYm9yZGVyX2xlZnQgPSBUKSAlPiUKICBjb2xsYXBzZV9yb3dzKDEsIHZhbGlnbiA9ICJ0b3AiKSAlPiUKICBncm91cF9yb3dzKCJTdHVkeSAyIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiU3R1ZHkgMyIsIDUsIDEwKSAlPiUKICBncm91cF9yb3dzKCJTdHVkeSA0IiwgMTEsIDE0KSAlPiUKICBhZGRfaGVhZGVyX2Fib3ZlKGMoIiAiID0gMiwgIkJPRFkiID0gMiwgIkhFQVJUIiA9IDIsICJNSU5EIiA9IDIsCiAgICAgICAgICAgICAgICAgICAgICJDb3JyZWxhdGlvbnMgKFBlYXJzb24ncyByKSIgPSAzKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS43CmBgYAoKYGBge3J9CnNjYXR0ZXJfa2V5IDwtIHNjb3Jlc19hbGwgJT4lCiAgZGlzdGluY3Qoc3R1ZHksIGFnZV9ncm91cCwgY2hhcmFjdGVyKSAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIGNvdW50KHN0dWR5LCBhZ2VfZ3JvdXAsIGFuaW1faW5hbikgJT4lCiAgbXV0YXRlKGNoYXJhY3Rlcl9saXN0ID0gY2FzZV93aGVuKAogICAgYW5pbV9pbmFuID09ICJhbmltYXRlIiAmIG4gPT0gMSB+ICJiZWV0bGUiLAogICAgYW5pbV9pbmFuID09ICJpbmFuaW1hdGUiICYgbiA9PSAxIH4gInJvYm90IiwKICAgIG4gPiAxIH4gcGFzdGUwKCJ2YXJpb3VzIChuPSIsIG4sICIpIikpKQpgYGAKCmBgYHtyfQpzY29yZV9hbGxfbWIgPC0gc2NvcmVzX2FsbCAlPiUKICBsZWZ0X2pvaW4oYW5pbV9sb29rdXApICU+JQogIGdyb3VwX2J5KHN0dWR5LCBhZ2VfZ3JvdXAsIGFuaW1faW5hbiwgZmFjdG9yKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdhdGhlcihrZXksIHZhbHVlLCBjKGNpX2xvd2VyLCBjaV91cHBlciwgbWVhbikpICU+JQogIHVuaXRlKGZhY3Rvcl9rZXksIGMoZmFjdG9yLCBrZXkpKSAlPiUKICBzcHJlYWQoZmFjdG9yX2tleSwgdmFsdWUpICU+JQogIHJlbmFtZV9hbGwoZnVucyhnc3ViKCJfbWVhbiIsICIiLCAuKSkpCmBgYAoKSW4gdGhpcyBjaGFwdGVyLCBJIGZvY3VzZWQgb24gYSB0aGlyZCBhc3BlY3Qgb2YgdGhlIGRldmVsb3BtZW50IG9mIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlOiB0aGUgZGVwbG95bWVudCBvZiB0aGVzZSByZXByZXNlbnRhdGlvbnMgaW4gYXNzZXNzbWVudHMgb2YgcGFydGljdWxhciBiZWluZ3MgaW4gdGhlIHdvcmxkLiBJIGZvY3VzZWQgaW4gcGFydGljdWxhciBvbiAgYW5hbHlzZXMgdGhhdCBtaWdodCBicmluZyB0byBsaWdodCBob3cgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGludGVyYWN0IHdpdGggZGlzdGluY3Rpb25zIGJldHdlZW4gYW5pbWF0ZSBiZWluZ3MgdnMuIGluYW5pbWF0ZSBvYmplY3RzLiAKCiMjIEFuIGFkdWx0IGVuZHBvaW50CgpUYWtlbiB0b2dldGhlciwgdGhlc2Ugc3R1ZGllcyBzaGVkIG5ldyBsaWdodCBvbiB0aGUgcm9sZSBvZiBhdHRyaWJ1dGlvbnMgb2YgbWVudGFsIGxpZmUgaW4gYWR1bHRzJyBkaXN0aW5jdGlvbiBiZXR3ZWVuIGFuaW1hdGUgYmVpbmdzIGFuZCBpbmFuaW1hdGUgb2JqZWN0cy4gVGhlc2UgZmluZGluZ3MgYXJlIHBlcmhhcHMgZWFzaWVzdCB0byB1bmRlcnN0YW5kIGluIHRlcm1zIG9mIHRoZSB2aXN1YWxpemF0aW9ucyBvZiBfQk9EWV8sIF9IRUFSVF8sIGFuZCBfTUlORF8gc2NvcmVzIGZvciBhbmltYXRlIHZzLiBpbmFuaW1hdGUgY2hhcmFjdGVycyBwcmVzZW50ZWQgaW4gRmlndXJlcyA1LjggYW5kIDUuOS4gCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNn0KZmlndXJlNS44X3Bsb3QgPC0gZ2dwbG90KHNjb3Jlc19hbGxfY2VudGVyZWRfbG9uZywKICAgICAgIGFlcyh4ID0gc3R1ZHksIHkgPSBzY29yZSwgZ3JvdXAgPSBhbmltX2luYW4sIGNvbG9yID0gYW5pbV9pbmFuLAogICAgICAgICAgIHNoYXBlID0gZGVzaWduKSkgKwogIGZhY2V0X2dyaWQoYWdlX2dyb3VwIH4gZmFjdG9yKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuMSwgc2hhcGUgPSAiY2lyY2xlIiwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIuaGVpZ2h0ID0gMC4wNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSAwLjc1KSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkoZGVzaWduLCBzdHVkeSwgYWdlX2dyb3VwLCBmYWN0b3IsIGFuaW1faW5hbikgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDMsCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjc1KSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCgiQW5pbWFjeSBzdGF0dXMiLCB2YWx1ZXMgPSBjb2xvcnNBSSwKICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChhbHBoYSA9IDEpKSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCgiVmFyaWFudCBvZiBleHBlcmltZW50YWwgYXBwcm9hY2giLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKDE2LCAxNSwgMTcpLAogICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KGFscGhhID0gMSkpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh4ID0gIlN0dWR5IiwgeSA9ICJTY29yZSIpCmBgYAoKYGBge3J9CmZpZ3VyZTUuOF9jYXAgPC0gYWRkX3N1YihmaWd1cmU1LjhfcGxvdCwgc3RyX3dyYXAoIkZpZ3VyZSA1Ljg6IERpZmZlcmVudGlvbiBvZiBhbmltYXRlIHZzLiBpbmFuaW1hdGUgY2hhcmFjdGVycyBpbiBwYXJ0aWNpcGFudHMnIGVuZG9yc2VtZW50cyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYWNyb3NzIHN0dWRpZXMgYW5kIGFnZSBncm91cHMsIHVzaW5nIGFkdWx0cycgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHNjYWxlcyBmb3IgYWxsIHNhbXBsZXMuIEluIFN0dWRpZXMgMWEsIDFiLCBhbmQgMiwgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCBlaXRoZXIgYW4gYW5pbWF0ZSAnZWRnZSBjYXNlJyAoYSBiZWV0bGUpIG9yIGFuIGluYW5pbWF0ZSBlZGdlIGNhc2UgKGEgcm9ib3QpLiBJbiBTdHVkeSAxYyBhbmQgU3R1ZHkgNCwgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCBib3RoIGFuIGFuaW1hdGUgYW5kIGFuIGluYW5pbWF0ZSAnZWRnZSBjYXNlJyAoYSBiZWV0bGUgYW5kIGEgcm9ib3QpLiBJbiBTdHVkeSAxZCwgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCBlaXRoZXIgb25lIG9mIDE3IGFuaW1hdGUgYmVpbmdzIChhZHVsdCwgY2hpbGQsIGluZmFudCwgcGVyc29uIGluIGEgcGVyc2lzdGVudCB2ZWdldGF0aXZlIHN0YXRlLCBmZXR1cywgY2hpbXBhbnplZSwgZWxlcGhhbnQsIGRvbHBoaW4sIGJlYXIsIGRvZywgZ29hdCwgbW91c2UsIGZyb2csIGJsdWUgamF5LCBmaXNoLCBiZWV0bGUsIG9yIG1pY3JvYmUpIG9yIG9uZSBvZiBmb3VyIGluYW5pbWF0ZSBvYmplY3RzIChyb2JvdCwgY29tcHV0ZXIsIGNhciwgc3RhcGxlcik7IHNpbWlsYXJseSwgaW4gU3R1ZHkgMywgZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCBlaXRoZXIgb25lIG9mIGZpdmUgYW5pbWF0ZSBjaGFyYWN0ZXJzIChlbGVwaGFudCwgZ29hdCwgbW91c2UsIGJpcmQsIG9yIGJlZXRsZSkgb3Igb25lIG9mIGZvdXIgaW5hbmltYXRlIGNoYXJhY3RlcnMgKHRlZGR5IGJlYXIsIGRvbGwsIHJvYm90LCBvciBjb21wdXRlcikuIEZvciBlYWNoIGNvbmNlcHR1YWwgdW5pdCwgc2NvcmVzIGNvdWxkIHJhbmdlIGZyb20gMC0xLiBJbmRpdmlkdWFsIHBhcnRpY2lwYW50cyBhcmUgcGxvdHRlZCBhcyB0cmFuc2x1Y2VudCBjaXJjbGVzLCBhbmQgbWVhbiBzY29yZXMgYXJlIHBsb3R0ZWQgYXMgbGFyZ2VyLCBzb2xpZCBibGFjayBwb2ludHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIiwgMTMwKSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjh9CmdnZHJhdyhmaWd1cmU1LjhfY2FwKQpgYGAKCmBgYHtyfQojIHJfYW5pbSA8LSBicm0oc2NvcmVfY2VudGVyZWQwLjUgfiBmYWN0b3IgKiBhbmltX2luYW4gKiBhZ2VfZ3JvdXAgKwojICAgICAgICAgICAgICAgICAoMSB8IHN0dWR5L3N1YmlkKSArICgxIHwgY2hhcmFjdGVyKSwKIyAgICAgICAgICAgICAgIGRhdGEgPSBzY29yZXNfYWxsX2NlbnRlcmVkX2xvbmcgJT4lCiMgICAgICAgICAgICAgICAgIGZpbHRlcighZ3JlcGwoIlN0dWR5IDEiLCBzdHVkeSkpLAojICAgICAgICAgICAgICAgY29udHJvbCA9IGxpc3QoYWRhcHRfZGVsdGEgPSAwLjk5KSwKIyAgICAgICAgICAgICAgIGNvcmVzID0gNCkKIyAKIyBzYXZlUkRTKHJfYW5pbSwgIi4vc3RvcmVkL2JybXNfbW9kZWxzL3JfYW5pbSIpCgpyX2FuaW0gPC0gcmVhZFJEUygiLi9zdG9yZWQvYnJtc19tb2RlbHMvcl9hbmltIikKYGBgCgpgYGB7cn0KcmVndGFiX2FuaW0gPC0gZml4ZWYocl9hbmltKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbSIpICU+JQogIG11dGF0ZShDSTk1ID0gcGFzdGUwKCJbIiwgZm9ybWF0KHJvdW5kKFEyLjUsIDIpLCBuc21hbGwgPSAyKSwKICAgICAgICAgICAgICAgICAgICAgICAiLCAiLCBmb3JtYXQocm91bmQoUTk3LjUsIDIpLCBuc21hbGwgPSAyKSwgIl0iKSwKICAgICAgICAgbm9uemVybyA9IGlmZWxzZShRMi41ICogUTk3LjUgPj0gMCwgIioiLCAiIikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIHMuZS4gPSBFc3QuRXJyb3IpICU+JQogIG11dGF0ZShwYXJhbSA9IGZhY3RvcigKICAgIHBhcmFtLAogICAgbGV2ZWxzID0gYygKICAgICAgIyBCT0RZCiAgICAgICJJbnRlcmNlcHQiLCAKICAgICAgImFnZV9ncm91cF9vbGQiLCAKICAgICAgImFnZV9ncm91cF95bmciLCAKICAgICAgImFuaW1faW5hbl9hbmltX0dNIiwgIyBib2xkCiAgICAgICJhbmltX2luYW5fYW5pbV9HTTphZ2VfZ3JvdXBfb2xkIiwgIyBib2xkCiAgICAgICJhbmltX2luYW5fYW5pbV9HTTphZ2VfZ3JvdXBfeW5nIiwgIyBib2xkCiAgICAgICMgSEVBUlQKICAgICAgImZhY3Rvcl9oZWFydF9ib2R5IiwgCiAgICAgICJmYWN0b3JfaGVhcnRfYm9keTphZ2VfZ3JvdXBfb2xkIiwgCiAgICAgICJmYWN0b3JfaGVhcnRfYm9keTphZ2VfZ3JvdXBfeW5nIiwKICAgICAgImZhY3Rvcl9oZWFydF9ib2R5OmFuaW1faW5hbl9hbmltX0dNIiwgIyBib2xkCiAgICAgICJmYWN0b3JfaGVhcnRfYm9keTphbmltX2luYW5fYW5pbV9HTTphZ2VfZ3JvdXBfb2xkIiwgIyBib2xkCiAgICAgICJmYWN0b3JfaGVhcnRfYm9keTphbmltX2luYW5fYW5pbV9HTTphZ2VfZ3JvdXBfeW5nIiwgIyBib2xkCiAgICAgICMgTUlORAogICAgICAiZmFjdG9yX21pbmRfYm9keSIsCiAgICAgICJmYWN0b3JfbWluZF9ib2R5OmFnZV9ncm91cF9vbGQiLCAKICAgICAgImZhY3Rvcl9taW5kX2JvZHk6YWdlX2dyb3VwX3luZyIsCiAgICAgICJmYWN0b3JfbWluZF9ib2R5OmFuaW1faW5hbl9hbmltX0dNIiwgIyBib2xkCiAgICAgICJmYWN0b3JfbWluZF9ib2R5OmFuaW1faW5hbl9hbmltX0dNOmFnZV9ncm91cF9vbGQiLCAjIGJvbGQKICAgICAgImZhY3Rvcl9taW5kX2JvZHk6YW5pbV9pbmFuX2FuaW1fR006YWdlX2dyb3VwX3luZyIgIyBib2xkCiAgICApLAogICAgbGFiZWxzID0gYygKICAgICAgIyBCT0RZCiAgICAgICJCT0RZLCBhbW9uZyBhZHVsdHMgKGludGVyY2VwdCkiLAogICAgICAiQk9EWSwgb2xkZXIgY2hpbGRyZW4gKDctOXkpIHZzLiBhZHVsdHMgKG1haW4gZWZmZWN0KSIsIAogICAgICAiQk9EWSwgeW91bmdlciBjaGlsZHJlbiAoNC02eSkgdnMuIGFkdWx0cyAobWFpbiBlZmZlY3QpIiwKICAgICAgIkJPRFksIGFuaW1hdGVzIHZzLiBpbmFuaW1hdGVzLCBhbW9uZyBhZHVsdHMgKG1haW4gZWZmZWN0KSIsCiAgICAgICJCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgb2xkZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyAoMi13YXkgaW50ZXJhY3Rpb24pIiwKICAgICAgIkJPRFksIGFuaW1hdGVzIHZzLiBpbmFuaW1hdGVzLCB5b3VuZ2VyIGNoaWxkcmVuIHZzLiBhZHVsdHMgKDItd2F5IGludGVyYWN0aW9uKSIsCiAgICAgICMgSEVBUlQKICAgICAgIkhFQVJUIHZzLiBCT0RZLCBhbW9uZyBhZHVsdHMgKG1haW4gZWZmZWN0KSIsCiAgICAgICJIRUFSVCB2cy4gQk9EWSwgb2xkZXIgY2hpbGRyZW4gKDctOXkpIHZzLiBhZHVsdHMgKDItd2F5IGludGVyYWN0aW9uKSIsIAogICAgICAiSEVBUlQgdnMuIEJPRFksIHlvdW5nZXIgY2hpbGRyZW4gKDQtNnkpIHZzLiBhZHVsdHMgKDItd2F5IGludGVyYWN0aW9uKSIsCiAgICAgICJIRUFSVCB2cy4gQk9EWSwgYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMsIGFtb25nIGFkdWx0cyAoMi13YXkgaW50ZXJhY3Rpb24pIiwKICAgICAgIkhFQVJUIHZzLiBCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgb2xkZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyAoMy13YXkgaW50ZXJhY3Rpb24pIiwKICAgICAgIkhFQVJUIHZzLiBCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgeW91bmdlciBjaGlsZHJlbiB2cy4gYWR1bHRzICgzLXdheSBpbnRlcmFjdGlvbikiLAogICAgICAjIE1JTkQKICAgICAgIk1JTkQgdnMuIEJPRFksIGFtb25nIGFkdWx0cyAobWFpbiBlZmZlY3QpIiwKICAgICAgIk1JTkQgdnMuIEJPRFksIG9sZGVyIGNoaWxkcmVuICg3LTl5KSB2cy4gYWR1bHRzICgyLXdheSBpbnRlcmFjdGlvbikiLCAKICAgICAgIk1JTkQgdnMuIEJPRFksIHlvdW5nZXIgY2hpbGRyZW4gKDQtNnkpIHZzLiBhZHVsdHMgKDItd2F5IGludGVyYWN0aW9uKSIsCiAgICAgICJNSU5EIHZzLiBCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgYW1vbmcgYWR1bHRzICgyLXdheSBpbnRlcmFjdGlvbikiLAogICAgICAiTUlORCB2cy4gQk9EWSwgYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMsIG9sZGVyIGNoaWxkcmVuIHZzLiBhZHVsdHMgKDMtd2F5IGludGVyYWN0aW9uKSIsCiAgICAgICJNSU5EIHZzLiBCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgeW91bmdlciBjaGlsZHJlbiB2cy4gYWR1bHRzICgzLXdheSBpbnRlcmFjdGlvbikiCiAgICAgICkpKSAlPiUKICBzZWxlY3QocGFyYW0sIGIsIHMuZS4sIENJOTUsIG5vbnplcm8pICU+JQogIGFycmFuZ2UocGFyYW0pCmBgYAoKYGBge3J9CnRhYmxlNS44IDwtIHJlZ3RhYl9hbmltICU+JQogIHNlbGVjdCgtcy5lLikgJT4lCiAgcmVuYW1lKFBhcmFtZXRlciA9IHBhcmFtLCBgOTUlIENJYCA9IENJOTUsIGAgYCA9IG5vbnplcm8pICU+JQogIGthYmxlKGRpZ2l0cyA9IDIsCiAgICAgICAgY2FwdGlvbiA9ICJUYWJsZSA1Ljg6IFJlZ3Jlc3Npb24gYW5hbHlzaXMgb2YgZGlzdGluY3Rpb25zIGJldHdlZW4gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIHRhcmdldCBjaGFyYWN0ZXJzIGluIGF0dHJpYnV0aW9ucyBvZiBCT0RZLCBIRUFSVCwgYW5kIE1JTkQgYW1vbmcgVVMgYWR1bHRzLCA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuLCBhbmQgNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiBpbiBTdHVkaWVzIDItNC4gSW4gdGVybXMgb2YgZml4ZWQgZWZmZWN0cywgdGhpcyBCYXllc2lhbiByZWdyZXNzaW9uIGluY2x1ZGVkIGFsbCBtYWluIGVmZmVjdHMgYW5kIGludGVyYWN0aW9ucyBiZXR3ZWVuIGZhY3RvciAoZHVtbXktY29kZWQgZm9yIGNvbXBhcmlzb25zIHRvIHRoZSBCT0RZIGRvbWFpbiBhcyBhIGJhc2VsaW5lKSwgYWdlIGdyb3VwIChkdW1teS1jb2RlZCBmb3IgY29tcGFyaXNvbnMgdG8gYWR1bHRzIGFzIGEgYmFzZWxpbmUpLCBhbmQgYW5pbWFjeSBzdGF0dXMgKGVmZmVjdC1jb2RlZCBmb3IgY29tcGFyaXNvbnMgb2YgYW5pbWF0ZSBjaGFyYWN0ZXJzIHRvIHRoZSBncmFuZCBtZWFuIGNvbGxhcHNpbmcgYWNyb3NzIGNoYXJhY3RlcnMpLiBUaGUgYW5pbWF0ZS1pbmFuaW1hdGUgY29tcGFyaXNvbnMgKGluY2x1ZGluZyBpbnRlcmFjdGlvbnMgd2l0aCBhZ2UgZ3JvdXApIGFyZSBoaWdobGlnaHRlZCBpbiBib2xkLCBiZWNhdXNlIHRoZXNlIGFyZSB0aGUgcHJpbWFyeSBwYXJhbWV0ZXJzIG9mIGludGVyZXN0IGZvciB0aGVzZSBhbmFseXNlcy4gRm9yIGVhY2ggcGFyYW1ldGVyLCB0aGUgdGFibGUgaW5jbHVkZXMgdGhlIGVzdGltYXRlIChiKSBhbmQgYSA5NSUgY3JlZGlibGUgaW50ZXJ2YWwgZm9yIHRoYXQgZXN0aW1hdGUuIEFzdGVyaXNrcyBpbmRpY2F0ZSA5NSUgY3JlZGlibGUgaW50ZXJ2YWxzIHRoYXQgZG8gbm90IGluY2x1ZGUgMC4iKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiQk9EWSIsIDEsIDYpICU+JQogIGdyb3VwX3Jvd3MoIkhFQVJUIiwgNywgMTIpICU+JQogIGdyb3VwX3Jvd3MoIk1JTkQiLCAxMywgMTgpICU+JQogIHJvd19zcGVjKGMoNDo2LCAxMDoxMiwgMTY6MTgpLCBib2xkID0gVCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnRhYmxlNS44CmBgYAoKRmlyc3QsIGluIHRoZSBhZ2dyZWdhdGUsIHRoZSBsYXJnZXN0IGFuZCBtb3N0IHJvYnVzdCBhbmltYXRlLWluYW5pbWF0ZSBkaXN0aW5jdGlvbnMgYW1vbmcgYWR1bHRzIGluIHRoZXNlIHN0dWRpZXMgd2VyZSBpbiB0aGUgQk9EWSBkb21haW4sIGZvciB3aGljaCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIHNwYW5uZWQgYXQgbGVhc3QgaGFsZiBvZiB0aGUgMC0xIHNjYWxlIGFjcm9zcyBhbGwgb2YgdGhlIHN0dWRpZXMgaW5jbHVkZWQgaW4gdGhpcyBkaXNzZXJ0YXRpb24gKHNlZSBGaWd1cmUgNS44LCB0b3Agcm93KS4gQSByZWdyZXNzaW9uIGFuYWx5c2lzIGNvbmZpcm1lZCB0aGF0IGFkdWx0IHBhcnRpY2lwYW50cyBkaXN0aW5ndWlzaGVkIHN0cm9uZ2x5IGJldHdlZW4gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgaW4gdGhlaXIgX0JPRFlfIHNjb3JlcyAoc2VlICJCT0RZLCBhbW9uZyBhZHVsdHMgKGludGVyY2VwdCkiIHJvdyBpbiBUYWJsZSA1LjgpOyBjb2xsYXBzaW5nIGFjcm9zcyBzdHVkaWVzIHRoaXMgZGlzdGluY3Rpb24gd2FzIHN0aWxsIHByZXNlbnQsIGJ1dCBzdWJzdGFudGlhbGx5IGRpbWluaXNoZWQsIGluIHRoZSBIRUFSVCBhbmQgTUlORCBkb21haW5zIChzZWUgIkhFQVJUIHZzLiBCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgYW1vbmcgYWR1bHRzICgyLXdheSBpbnRlcmFjdGlvbikiIGFuZCAiTUlORCB2cy4gQk9EWSwgYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMsIGFtb25nIGFkdWx0cyAoMi13YXkgaW50ZXJhY3Rpb24pIiByb3dzIGluIFRhYmxlIDUuOCkuIFZpc3VhbCBpbnNwZWN0aW9uIG9mIEZpZ3VyZSA1LjggKHRvcCByb3cpIHN1Z2dlc3RzIHRoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhbmltYXRlIGFuZCBpbmFuaW1hdGUgY2hhcmFjdGVycyBpbiBfQk9EWV8gc2NvcmVzIHdhcyBxdWl0ZSBjb25zaXN0ZW50IGFjcm9zcyBzdHVkaWVzLCB3aGlsZSBkaWZmZXJlbmNlcyBpbiBfSEVBUlRfIGFuZCBfTUlORF8gc2NvcmVzIHZhcmllZCByYXRoZXIgZHJhbWF0aWNhbGx5LiAoU2VlIGFsc28gdGhlICJSb2JvdCB2cy4gR00iIGFuZCAiQW5pbWF0ZSBjaGFyYWN0ZXJzIHZzLiBHTSIgcm93cyBpbiBUYWJsZXMgNS4xLCA1LjMsIGFuZCA1LjUgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgYW1vbmcgYWR1bHRzIGVhY2ggc3R1ZHkgc2VwYXJhdGVseS4pCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuOX0Kc2NhdHRlcl80NiA8LSBzY2F0dGVyX3Bsb3RfZnVuKHdoaWNoX2FnZV9ncm91cCA9ICJDaGlsZHJlbiwgNC02eSIpCnNjYXR0ZXJfNzkgPC0gc2NhdHRlcl9wbG90X2Z1bih3aGljaF9hZ2VfZ3JvdXAgPSAiQ2hpbGRyZW4sIDctOXkiKQpzY2F0dGVyX2FkIDwtIHNjYXR0ZXJfcGxvdF9mdW4od2hpY2hfYWdlX2dyb3VwID0gIkFkdWx0cyIpCmBgYAoKYGBge3J9CmZpZ3VyZTUuOV9wbG90cyA8LSBwbG90X2dyaWQoCiAgcGxvdF9ncmlkKHNjYXR0ZXJfNDYgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgc2NhdHRlcl83OSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksCiAgICAgICAgICAgIGdldF9sZWdlbmQoc2NhdHRlcl80NiArIAogICAgICAgICAgICAgICBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG9yYmFyKGRpcmVjdGlvbiA9ICJ2ZXJ0aWNhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyaGVpZ2h0ID0gMTUsIGJhcndpZHRoID0gMC44KSkpLAogICAgICAgICAgICBuY29sID0gNCwgcmVsX3dpZHRocyA9IGMoMSwgMSwgMC4zLCAwLjc1KSwgbGFiZWxzID0gYygiQSIsICJCIiwgIiIpKSwKICBwbG90X2dyaWQoc2NhdHRlcl9hZCArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIGxhYmVscyA9ICJDIiksCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAxKSkKYGBgCgpgYGB7cn0KZmlndXJlNS45X2NhcCA8LSBhZGRfc3ViKGZpZ3VyZTUuOV9wbG90cywgc3RyX3dyYXAoIkZpZ3VyZSA1Ljk6IFBhcnRpY2lwYW50cycgZW5kb3JzZW1lbnRzIG9mIEJPRFksIEhFQVJULCBhbmQgTUlORCBmb3IgYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMsIHVzaW5nIGFkdWx0cycgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIHNjYWxlcyBmb3IgYWxsIHNhbXBsZXMuIChBKSA0LSB0byA2LXllYXItb2xkIGNoaWxkcmVuIGluIFN0dWRpZXMgMyBhbmQgNC4gKEIpIDctIHRvIDkteWVhci1vbGQgY2hpbGRyZW4gaW4gU3R1ZGllcyAyIGFuZCAzLiAoQykgQWR1bHRzIGluIFN0dWRpZXMgMS00LiBJbiBTdHVkaWVzIDFhLCAxYiwgYW5kIDIsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgZWl0aGVyIGFuIGFuaW1hdGUgJ2VkZ2UgY2FzZScgKGEgYmVldGxlKSBvciBhbiBpbmFuaW1hdGUgZWRnZSBjYXNlIChhIHJvYm90KS4gSW4gU3R1ZHkgMWMgYW5kIFN0dWR5IDQsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgYm90aCBhbiBhbmltYXRlIGFuZCBhbiBpbmFuaW1hdGUgJ2VkZ2UgY2FzZScgKGEgYmVldGxlIGFuZCBhIHJvYm90KS4gSW4gU3R1ZHkgMWQsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgZWl0aGVyIG9uZSBvZiAxNyBhbmltYXRlIGJlaW5ncyAoYWR1bHQsIGNoaWxkLCBpbmZhbnQsIHBlcnNvbiBpbiBhIHBlcnNpc3RlbnQgdmVnZXRhdGl2ZSBzdGF0ZSwgZmV0dXMsIGNoaW1wYW56ZWUsIGVsZXBoYW50LCBkb2xwaGluLCBiZWFyLCBkb2csIGdvYXQsIG1vdXNlLCBmcm9nLCBibHVlIGpheSwgZmlzaCwgYmVldGxlLCBvciBtaWNyb2JlKSBvciBvbmUgb2YgZm91ciBpbmFuaW1hdGUgb2JqZWN0cyAocm9ib3QsIGNvbXB1dGVyLCBjYXIsIHN0YXBsZXIpOyBzaW1pbGFybHksIGluIFN0dWR5IDMsIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgZWl0aGVyIG9uZSBvZiBmaXZlIGFuaW1hdGUgY2hhcmFjdGVycyAoZWxlcGhhbnQsIGdvYXQsIG1vdXNlLCBiaXJkLCBvciBiZWV0bGUpIG9yIG9uZSBvZiBmb3VyIGluYW5pbWF0ZSBjaGFyYWN0ZXJzICh0ZWRkeSBiZWFyLCBkb2xsLCByb2JvdCwgb3IgY29tcHV0ZXIpLiBGb3IgZWFjaCBjb25jZXB0dWFsIHVuaXQsIHNjb3JlcyBjb3VsZCByYW5nZSBmcm9tIDAtMS4gSW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgYXJlIHBsb3R0ZWQgYXMgdHJhbnNsdWNlbnQgY2lyY2xlcywgYW5kIG1lYW4gc2NvcmVzIGFyZSBwbG90dGVkIGFzIGxhcmdlciwgc29saWQgZGlhbW9uZHMuIEVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMuIiwgMTU1KSwgeCA9IDAsIGhqdXN0ID0gMCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDcsIGZpZy5hc3AgPSAwLjg1fQpnZ2RyYXcoZmlndXJlNS45X2NhcCkKYGBgCgpCZXlvbmQgdGhpcywgdGhlcmUgYXBwZWFyIHRvIGJlIGhhdmUgYmVlbiBkaWZmZXJlbmNlcyBiZXR3ZWVuIGFuaW1hdGUgdnMuIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIGluIHRoZSBfdmFyaWFiaWxpdHlfIG9mIGFkdWx0cycgQk9EWSwgSEVBUlQsIGFuZCBNSU5EIGF0dHJpYnV0aW9ucy4gSW4gZWFjaCBzdHVkeSwgYWR1bHRzJyBhdHRyaWJ1dGlvbnMgb2YgdG8gYW5pbWF0ZSBiZWluZ3MgdmFyaWVkIHdpZGVseSBhbG9uZyBhbGwgdGhyZWUgZGltZW5zaW9uczogQk9EWSwgSEVBUlQsIGFuZCBNSU5EIChzZWUgRmlndXJlIDUuOCwgdG9wIHJvdywgRmlndXJlIDUuOSwgcGFuZWwgQywgdG9wIHJvdywgYW5kIFRhYmxlIDUuNyBmb3Igc3RhbmRhcmQgZGV2aWF0aW9ucyBhY3Jvc3Mgc3R1ZHksIGFuaW1hY3kgc3RhdHVzLCBhbmQgZG9tYWluKS4gVGhpcyB2YXJpYWJpbGl0eSBoYXMgc2V2ZXJhbCBwb3NzaWJsZSBzb3VyY2VzLCBpbmNsdWRpbmcgZGlmZmVyZW5jZXMgaW4gb3BpbmlvbnMgb3IgYmVsaWVmcyBhY3Jvc3MgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgKGVzcGVjaWFsbHkgcmVsZXZhbnQgZm9yIGF0dHJpYnV0aW9ucyB0byB0aGUgYW5pbWF0ZSAiZWRnZSBjYXNlIuKAlHRoZSBiZWV0bGXigJRpbiBTdHVkaWVzIDFhLCAxYiwgMWMsIDIsIGFuZCA0KSwgYXMgd2VsbCBhcyBkaWZmZXJlbmNlcyBpbiB0aGUgKHBlcmNlaXZlZCkgbWVudGFsIGNhcGFjaXR5IHByb2ZpbGVzIG9mIGRpZmZlcmVudCBhbmltYXRlIGJlaW5ncyAoZXNwZWNpYWxseSByZWxldmFudCBmb3IgYXR0cmlidXRpb25zIHRvIHRoZSAiZGl2ZXJzZSBjaGFyYWN0ZXJzIiBmZWF0dXJlZCBpbiBTdHVkeSAxZCBhbmQgU3R1ZHkgMykuIE1vcmVvdmVyLCB0aGVzZSBhdHRyaWJ1dGlvbnMgYXBwZWFyIHRvIGhhdmUgdmFyaWVkIGluIHRhbmRlbSAoc2VlIFRhYmxlIDUuNyBhbmQgRmlndXJlIDUuOSkuIF9CT0RZXyBhbmQgX01JTkRfIHNjb3JlcyBmb3IgYW5pbWF0ZSBiZWluZ3Mgd2VyZSBwYXJ0aWN1bGFybHkgc3Ryb25nbHkgY29ycmVsYXRlZCAoUGVhcnNvbidzIHIgPSBgciBzdGF0X3JhbmdlX3ByaW50X2Z1bigiQWR1bHRzIiwgImFuaW1hdGUiLCAicl9CTSIpYCBhY3Jvc3MgU3R1ZGllcyAyLTQpLCBhbmQgc2NvcmVzIGZvciBlYWNoIG9mIHRoZXNlIG1vcmUgImJhc2ljIiBjb25jZXB0dWFsIHVuaXRzIChwZXIgQ2hhcHRlciBJVikgd2VyZSBhbHNvIGNvcnJlbGF0ZWQgcXVpdGUgc3Ryb25nbHkgd2l0aCBfSEVBUlRfIHNjb3JlcyAoQk9EWSB2cy4gSEVBUlQ6IHIgPSBgciBzdGF0X3JhbmdlX3ByaW50X2Z1bigiQWR1bHRzIiwgImFuaW1hdGUiLCAicl9CSCIpYDsgTUlORCB2cy4gSEVBUlQ6IHIgPSBgciBzdGF0X3JhbmdlX3ByaW50X2Z1bigiQWR1bHRzIiwgImFuaW1hdGUiLCAicl9ITSIpYCkuIEluZGVlZOKAlHRvIHBpY2sgdXAgb24gYSB0aHJlYWQgZnJvbSB0aGUgR2VuZXJhbCBEaXNjdXNzaW9uIGluIENoYXB0ZXIgSVbigJRhdHRyaWJ1dGlvbnMgb2YgSEVBUlQgdG8gYW5pbWF0ZSBiZWluZ3MgYXBwZWFyIHRvIGhhdmUgYmVlbiBfam9pbnRseV8gZGVwZW5kZW50IG9uIGF0dHJpYnV0aW9ucyBvZiBfYm90aF8gQk9EWSBhbmQgTUlORDsgc2VlIEZpZ3VyZSA1LjksIHBhbmVsIEMsIGluIHdoaWNoIHN0cm9uZyBfSEVBUlRfIHNjb3JlcyBhcmUgcHJlc2VudCBvbmx5IGFtb25nIHBhcnRpY2lwYW50cyB3aG8gcmVjZWl2ZWQgc3Ryb25nIF9CT0RZXyBhbmQgX01JTkRfIHNjb3Jlc+KAlGkuZS4sIHJlZGRpc2ggcG9pbnRzIGFyZSBvbmx5IHByZXNlbnQgaW4gdGhlIHVwcGVyIHJpZ2h0IGNvcm5lciBvZiB0aGUgcGxvdCAoYW5kIHNlZSBbWFggQVBQRU5ESVggQz9dIGZvciByZWxldmFudCByZWdyZXNzaW9uIGFuYWx5c2VzKS4gCgpNZWFud2hpbGUsIGFkdWx0cycgYXR0cmlidXRpb25zIHRvIGluYW5pbWF0ZSBvYmplY3RzIChGaWd1cmUgNS45LCBwYW5lbCBDLCBib3R0b20gcm93KSB2YXJpZWQgcGFydGljdWxhcmx5IHN0cm9uZ2x5IGluIHRoZSBNSU5EIGRvbWFpbiwgYnV0IHNlZW1pbmdseSBsZXNzIGluIHRoZSBkb21haW5zIG9mIEJPRFkgYW5kIEhFQVJUIChzZWUgYWxzbyBUYWJsZSA1LjcpLiBBbW9uZyBpbmFuaW1hdGUgb2JqZWN0cywgX0JPRFlfIGFuZCBfSEVBUlRfIHNjb3JlcyB3ZXJlIHBhcnRpY3VsYXJseSBzdHJvbmdseSBjb3JyZWxhdGVkIChQZWFyc29uJ3MgciA9IGByIHN0YXRfcmFuZ2VfcHJpbnRfZnVuKCJBZHVsdHMiLCAiaW5hbmltYXRlIiwgInJfQkgiKWAgYWNyb3NzIFN0dWRpZXMgMi00KeKAlGJ1dCBoaWdoIHNjb3JlcyBpbiBlaXRoZXIgb2YgdGhlc2UgdHdvIGRvbWFpbnMgd2VyZSBxdWl0ZSByYXJlLiBTY29yZXMgZm9yIHRoZSB0d28gbW9yZSAiYmFzaWMiIGNvbmNlcHR1YWwgdW5pdHMgKHBlciBDaGFwdGVyIElWKSwgX0JPRFlfIGFuZCBfTUlORF8sIHdlcmUgb25seSB3ZWFrbHkgY29ycmVsYXRlZCAoUGVhcnNvbidzIHIgPSBgciBzdGF0X3JhbmdlX3ByaW50X2Z1bigiQWR1bHRzIiwgImluYW5pbWF0ZSIsICJyX0JNIilgIGFjcm9zcyBTdHVkaWVzIDItNCksIGFuZCBfTUlORF8gYW5kIF9IRUFSVF8gc2NvcmVzIHdlcmUgdmlydHVhbGx5IGluZGVwZW5kZW50IChNSU5EIHZzLiBIRUFSVDogciA9IGByIHN0YXRfcmFuZ2VfcHJpbnRfZnVuKCJBZHVsdHMiLCAiaW5hbmltYXRlIiwgInJfSE0iKWApLiAoU2VlIFtYWCBBUFBFTkRJWCBDP10gZm9yIHJlZ3Jlc3Npb24gYW5hbHlzZXMgZXhwbG9yaW5nIHRoZSBwb3NzaWJpbGl0eSBvZiBqb2ludCBkZXBlbmRlbmN5IG9mIEhFQVJUIG9uIEJPRFkgYW5kIE1JTkQgYW1vbmcgaW5hbmltYXRlIG9iamVjdHMuKQoKSW4gc3VtLCB0aGVzZSBzdHVkaWVzIHN1Z2dlc3QgdGhhdOKAlGluIGFkZGl0aW9uIHRvIGJpb2xvZ2ljYWwgcHJvcGVydGllcyBsaWtlIGhhdmluZyBibG9vZCwgZGlnZXN0aW5nIGZvb2QsIGdyb3dpbmcsIHJlcHJvZHVjaW5nLCBhbmQgZHlpbmcgW1hYIENJVEUgR0VMTUFOIGFuZCBvdGhlcnNd4oCUVVMgYWR1bHRzIGRpc3Rpbmd1aXNoIGFuaW1hdGUgYmVpbmdzIGZyb20gaW5hbmltYXRlIG9iamVjdHMgYnkgdGhlaXIgaGlnaCBkZWdyZWUgb2YgcGVyY2VpdmVkIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyAoQk9EWSnigJRhbmQsIHRvIGEgbGVzc2VyIGRlZ3JlZSwgdGhlaXIgc3VwZXJpb3Igc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgKEhFQVJUKSBhbmQgcGVyY2VwdHVhbCBjb2duaXRpdmUgYWJpbGl0aWVzIChNSU5EKS4gQWJvdmUgYW5kIGJleW9uZCBwZXJjZWl2aW5nIGFuaW1hdGVzIHZzLiBpbmFuaW1hdGVzIHRvIGRpZmZlciBpbiB0aGVpciAiYXZlcmFnZSIgbWVudGFsIGNhcGFjaXRpZXMsIGFkdWx0cyBpbiB0aGVzZSBzdHVkaWVzIGFsc28gYXBwZWFyZWQgdG8gY29uY2VwdHVhbGl6ZSBhbmltYXRlIGJlaW5ncyBhcyBlbnRpdGllcyB3aG8gX3ZhcnlfIHF1aXRlIGRyYW1hdGljYWxseSBpbiBhbGwgdGhyZWUgYXNwZWN0cyBvZiBtZW50YWwgbGlmZSwgYW5kIGZvciB3aG9tIHRoZXNlIGRpZmZlcmVudCBhc3BlY3RzIG9mIG1lbnRhbCBsaWZlIG1heSBiZSBjbG9zZWx5IHJlbGF0ZWQuIEluIGNvbnRyYXN0LCBpbiB0aGlzIGNvbnNlbnN1cyB2aWV3IGluYW5pbWF0ZSBvYmplY3RzIGFwcGVhciB0byBiZSBzZWVuIGFzIGVudGl0aWVzIHRoYXQgdmFyeSBtb3N0bHkgaW4gdGhlaXIgcGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIChNSU5EKSwgd2l0aCBjb25zaXN0ZW50bHkgbGl0dGxlIG9mIHRoZSBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgb3Igc29jaWFsLWVtb3Rpb25hbCBhYmlsaXRpZXMgb2YgdGhlIEJPRFkgYW5kIEhFQVJULgoKIyMgQSBkZXZlbG9wbWVudGFsIHRyYWplY3RvcnkKCkFzIGFtb25nIGFkdWx0cywgdGhlIGxhcmdlc3QgYW5kIG1vc3Qgcm9idXN0IGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9ucyBhbW9uZyBjaGlsZHJlbiBpbiB0aGVzZSBzdHVkaWVzIHdlcmUgYWxzbyBpbiB0aGUgQk9EWSBkb21haW7igJRidXQgdGhlc2UgZGlzdGluY3Rpb25zIHdlcmUgbm90IHF1aXRlIGFzIGRyYW1hdGljIGFtb25nIGNoaWxkcmVuIGFzIHRoZXkgd2VyZSBhbW9uZyBhZHVsdHM7IHNlZSBGaWd1cmUgNS44LCBtaWRkbGUgYW5kIGJvdHRvbSByb3dzLiBUaGUgcmVncmVzc2lvbiBhbmFseXNpcyByZXBvcnRlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBjb25maXJtZWQgdGhhdCB0aGUgZGlmZmVyZW5jZSBpbiBfQk9EWV8gc2NvcmVzIGJldHdlZW4gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgd2FzIHNtYWxsZXIgYm90aCBhbW9uZyBvbGRlciBjaGlsZHJlbiAoNy05eSkgYW5kIHBhcnRpY3VsYXJseSBhbW9uZyB5b3VuZ2VyIGNoaWxkcmVuICg0LTZ5KSB0aGFuIGl0IHdhcyBhbW9uZyBhZHVsdHMgKHNlZSAiQk9EWSwgYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMsIG9sZGVyIGNoaWxkcmVuIHZzLiBhZHVsdHMgKDItd2F5IGludGVyYWN0aW9uKSIgYW5kICJCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgeW91bmdlciBjaGlsZHJlbiB2cy4gYWR1bHRzICgyLXdheSBpbnRlcmFjdGlvbikiIGludGVyYWN0aW9ucyBpbiBUYWJsZSA1LjgpLiBNb3Jlb3ZlciwgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSBzdHJlbmd0aCBvZiB0aGlzIGRpc3RpbmN0aW9uIGFjcm9zcyBkb21haW5zIHdlcmUgc3Vic3RhbnRpYWxseSBhdHRlbnVhdGVkLCBib3RoIGFtb25nIG9sZGVyIGNoaWxkcmVuIGFuZCBwYXJ0aWN1bGFybHkgYW1vbmcgeW91bmdlciBjaGlsZHJlbiwgYXMgY29tcGFyZWQgdG8gYWR1bHRzIChzZWUgIkhFQVJUIHZzLiBCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgb2xkZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyAoMy13YXkgaW50ZXJhY3Rpb24pLCIgIkhFQVJUIHZzLiBCT0RZLCBhbmltYXRlcyB2cy4gaW5hbmltYXRlcywgeW91bmdlciBjaGlsZHJlbiB2cy4gYWR1bHRzICgzLXdheSBpbnRlcmFjdGlvbiksIiAiTUlORCB2cy4gQk9EWSwgYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMsIG9sZGVyIGNoaWxkcmVuIHZzLiBhZHVsdHMgKDMtd2F5IGludGVyYWN0aW9uKSwiIGFuZCAiTUlORCB2cy4gQk9EWSwgYW5pbWF0ZXMgdnMuIGluYW5pbWF0ZXMsIHlvdW5nZXIgY2hpbGRyZW4gdnMuIGFkdWx0cyAoMy13YXkgaW50ZXJhY3Rpb24pIiByb3dzIGluIFRhYmxlIDUuOCkuIChTZWUgYWxzbyB0aGUgIkludGVyYWN0aW9uIiByb3dzIGluIFRhYmxlcyA1LjEsIDUuMywgYW5kIDUuNSBmb3IgZGlmZmVyZW5jZXMgaW4gdGhlIHNpemUgb2YgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gYW5pbWF0ZSB2cy4gaW5hbmltYXRlIGNoYXJhY3RlcnMgYW1vbmcgY2hpZGxyZW4gdnMuIGFkdWx0cyBlYWNoIHN0dWR5IHNlcGFyYXRlbHk6IFRoaXMgdmFyaWVkIGJ5IGFnZSBncm91cCBpbiBhbGwgdGhyZWUgc3R1ZGllcyBpbiB0aGUgQk9EWSBkb21haW4sIGFuZCBpbiBvbmUgb2YgdGhyZWUgc3R1ZGllcyBmb3IgYm90aCB0aGUgSEVBUlQgYW5kIE1JTkQgZG9tYWlucy4pCgpJbiB0ZXJtcyBvZiB2YXJpYWJpbGl0eSwgYm90aCBvbGRlciBjaGlsZHJlbiAoNy05eSkgYW5kIHlvdW5nZXIgY2hpbGRyZW4gKDQtNnkpIGFwcGVhciwgaWYgYW55dGhpbmcsIHRvIGhhdmUgZGVtb25zdHJhdGVkIHRoZSByZXZlcnNlIHBhdHRlcm4gdG8gdGhhdCBvZiBhZHVsdHM6IF9CT0RZXyBzY29yZXMgYXBwZWFyIHRvIGhhdmUgYmVlbiBtb3JlIHZhcmlhYmxlIGZvciBfaW5hbmltYXRlXyB0aGFuIGFuaW1hdGUgY2hhcmFjdGVycywgYW5kIF9IRUFSVF8gYW5kIF9NSU5EXyBzY29yZXMgYXBwZWFyIHRvIGhhdmUgYmVlbiByb3VnaGx5IGVxdWFsbHkgdmFyaWFibGUgZm9yIGFuaW1hdGUgYW5kIGluYW5pbWF0ZSBjaGFyYWN0ZXJzIGFtb25nIGNoaWxkcmVuLiBNb3Jlb3ZlciwgY292YXJpYW5jZSByZWxhdGlvbnNoaXBzIGFtb25nIHRoZXNlIHRocmVlIGFzcGVjdHMgb2YgbWVudGFsIGxpZmUgYXBwZWFyZWQgdG8gYmUgbm8gY2xlYXJlciBvciBzdHJvbmdlciBhbW9uZyBhbmltYXRlcyB0aGFuIHRoZXkgd2VyZSBhbW9uZyBpbmFuaW1hdGVzLiBJbiBteSB2aWV3LCB0aGVyZSB3ZXJlIG5vIGNsZWFyIGluZGljYXRpb25zIG9mIHN1YnN0YW50aWFsIGRldmVsb3BtZW50IGJldHdlZW4gZWFybHkgYW5kIG1pZGRsZSBjaGlsZGhvb2QgaW4gdGhlc2UgYXNwZWN0cyBvZiB0aGUgZGVwbG95bWVudCBvZiBjb25jZXB0dWFsIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSwgc3VnZ2VzdGluZyB0aGF0IHRoaXMga2luZCBvZiBmaW5lIHR1bmluZyBtaWdodCBiZSBvbmdvaW5nIHdlbGwgaW50byBtaWRkbGUgY2hpbGRob29k4oCUcGVyaGFwcyBpbnRvIGFkb2xlc2VuY2Ugb3IgYmV5b25kLiAoU2VlIFRhYmxlIDUuNyBmb3IgYWxsIHN0YW5kYXJkIGRldmlhdGlvbnMgYW5kIGNvcnJlbGF0aW9ucy4pIAoKSW4gc3VtLCB3aGlsZSBJIGNoYXJhY3Rlcml6ZWQgYWR1bHRzIGFzIGNvbmNlcHR1YWxpemluZyBhbmltYXRlIGJlaW5ncyBhcyBlbnRpdGllcyB3aG8gdmFyeSBtb3JlIGRyYW1hdGljYWxseSBpbiB0aGVpciBCT0RZIGFuZCBIRUFSVCBjYXBhY2l0aWVzIHRoYW4gaW5hbmltYXRlIG9iamVjdHMgKGFuZCBmb3Igd2hvbSBhbGwgdGhyZWUgYXNwZWN0cyBvZiBtZW50YWwgbGlmZSBhcmUgbW9yZSBjbG9zZWx5IHJlbGF0ZWQpLCBJIGRvIG5vdCBjb25zaWRlciBTdHVkaWVzIDItNCB0byBvZmZlciBzdHJvbmcgZXZpZGVuY2UgdGhhdCBkaWZmZXJlbmNlcyBpbiBwZXJjZWl2ZWQgdmFyaWFiaWxpdHkgaW4gbWVudGFsIGNhcGFjaXRpZXMgb3IgZGlmZmVyZW5jZXMgaW4gcGVyY2VpdmVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgZGlmZmVyZW50IGFzcGVjdHMgb2YgbWVudGFsIGxpZmUgYXJlIGltcG9ydGFudCBwYXJ0cyBvZiBjaGlsZHJlbidzIGFuaW1hdGUtaW5hbmltYXRlIGRpc3RpbmN0aW9uLiBJbnN0ZWFkLCB0aGVzZSBzdHVkaWVzIHN1Z2dlc3QgdGhhdCB0aGUgcHJpbWFyeSByb2xlIG9mIGF0dHJpYnV0aW9ucyBvZiBtZW50YWwgbGlmZSBpbiA0LSB0byA5LXllYXItb2xkIGNoaWxkcmVuJ3MgYXR0cmlidXRpb25zIG9mIG1lbnRhbCBsaWZlIHNlZW1zIHRvIGJlIGdvdmVybmluZyB0aGVpciAiYXZlcmFnZSIgYXR0cmlidXRpb25zIG9mIHBoeXNpb2xvZ2ljYWwgc2Vuc2F0aW9ucyAoQk9EWSnigJRhbmQgdG8gYSBsZXNzZXIgZGVncmVlLCBzb2NpYWwtZW1vdGlvbmFsIChIRUFSVCkgYW5kIHBlcmNlcHR1YWwgY29nbml0aXZlIGFiaWxpdGllcyAoTUlORCnigJR0byB2YXJpb3VzIGVudGl0aWVzIGluIHRoZWlyIHdvcmxkLiAKCgojIENoYXB0ZXIgY29uY2x1c2lvbgoKSW4gdGhpcyBjaGFwdGVyLCBJIGV4cGxvcmVkIGEgdGhpcmQgYXNwZWN0IG9mIGNvbmNlcHR1YWwgcmVwcmVzZW50YXRpb25zIG9mIG1lbnRhbCBsaWZlIGFtb25nIFVTIGNoaWxkcmVuIGFuZCBhZHVsdHM6IFRoZSBfZGVwbG95bWVudF8gb2YgdGhlc2UgcmVwcmVzZW50YXRpb25zIGluIHJlYXNvbmluZyBhYm91dCBwYXJ0aWN1bGFyIGVudGl0aWVzIGluIHRoZSB3b3JsZC4gSSBmb2N1c2VkIGluIHBhcnRpY3VsYXIgb24gdGhlIHJvbGUgb2YgdGhlIGNsYXNzaWMgZGlzdGluY3Rpb24gYmV0d2VlbiAiYW5pbWF0ZSBiZWluZ3MiIChwcmltYXJpbHksIGh1bWFucyBhbmQgb3RoZXIgYmlvbG9naWNhbCBhbmltYWxzKSBhbmQgImluYW5pbWF0ZSBvYmplY3RzIiAoaW4gdGhpcyBjYXNlLCB0ZWNobm9sb2dpZXMgYXMgd2VsbCBhcyBpbmVydCBvYmplY3RzKSBpbiBhdHRyaWJ1dGlvbnMgb2YgQk9EWSwgSEVBUlQsIGFuZCBNSU5EICh0aGUgdGhyZWUgYXNwZWN0cyBvZiBtZW50YWwgbGlmZSB0aGF0IHNlZW0gdG8gYW5jaG9yIGFkdWx0cycgYW5kIG9sZGVyIGNoaWxkcmVuJ3MgY29uY2VwdHVhbCByZXByZXNlbnRhdGlvbnMgaW4gdGhpcyBkb21haW4sIGFzIGRlc2NyaWJlZCBpbiBDaGFwdGVyIElJSSkuCgpUaGVzZSBzdHVkaWVzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGZvbGxvd2luZyB0aGVvcnk6IEJ5IHRoZSBwcmVzY2hvb2wgeWVhcnMsIFVTIGNoaWxkcmVuJ3MgYW5pbWF0ZS1pbmFuaW1hdGUgZGlzdGluY3Rpb24gaW5jbHVkZXMgYW4gYXdhcmVuZXNzIHRoYXQgYW5pbWF0ZSBiZWluZ3MgYXJlIG1vcmUgbGlrZWx5IHRoYW4gaW5hbmltYXRlIG9iamVjdHMgdG8gaGF2ZSBwaHlzaW9sb2dpY2FsIHNlbnNhdGlvbnMgbGlrZSBodW5nZXIsIHBhaW4sIGFuZCBmYXRpZ3VlICh3aGF0IEkgaGF2ZSBjYWxsZWQgQk9EWSkuIFRoaXMgY29udGludWVzIHRvIGJlIHRoZSBwcmltYXJ5IGF4aXMgb2YgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIG1lbnRhbCBsaXZlcyBvZiBhbmltYXRlcyB2cy4gaW5hbmltdGVzIHRocm91Z2hvdXQgZGV2ZWxvcG1lbnQsIGluY3JlYXNpbmcgaW4gc2l6ZSBhbmQgcmVsaWFiaWxpdHkgb3ZlciBlYXJseSBhbmQgbWlkZGxlIGNoaWxkaG9vZCAoYW5kIHBlcmhhcHMgYmV5b25kKTsgdWx0aW1hdGVseSwgVVMgYWR1bHRzIHBlcmNlaXZlIHRoZSBCT0RZIGRvbWFpbiB0byBiZSB0aGUgc2l0ZSBvZiB0aGUgbW9zdCBkcmFtYXRpYyBhbmQgcm9idXN0IGRpZmZlcmVuY2VzIGluIHRoZSBtZW50YWwgbGl2ZXMgb2YgYW5pbWF0ZSBiZWluZ3MgdnMuIGluYW5pbWF0ZSBvYmplY3RzLiBBdCBhbGwgYWdlcywgYW5pbWF0ZXMgYW5kIGluYW5pbWF0ZXMgYXJlIGFsc28gcGVyY2VpdmVkIHRvIGRpZmZlciBpbiB0aGVpciBzb2NpYWwtZW1vdGlvbmFsIGFiaWxpdGllcyAoSEVBUlQpIGFuZCBwZXJjZXB0dWFsLWNvZ25pdGl2ZSBjYXBhY2l0aWVzIChNSU5EKSwgYnV0IGFtb25nIGNoaWxkcmVuIGFzIHdlbGwgYXMgYWR1bHRzIHRoZXNlIGRpZmZlcmVuY2VzIGFyZSBzbWFsbGVyIGFuZCBtb3JlIHZhcmlhYmxlIGFjcm9zcyB0aGUgcGFydGljdWxhciBiZWluZ3MgaW4gbWluZC4gRmluYWxseSwgYXQgc29tZSBwb2ludCBpbiBsYXRlciBjaGlsZGhvb2Qgb3IgYWRvbGVzZW5jZSwgVVMgY2hpbGRyZW4gY29tZSB0byBhY3F1aXJlIGFkdWx0cycgaW50dWl0aW9uIHRoYXQgYW5pbWF0ZSBiZWluZ3MgYXJlIGRpc3RpbmN0IGZyb20gaW5hbmltYXRlIG9iamVjdHMgbm90IG9ubHkgaW4gdGhhdCB0aGVpciBtZW50YWwgY2FwYWNpdGllcyBhcmUsIG9uIGF2ZXJhZ2UsIHN1cGVyaW9yIChlc3BlY2lhbGx5IGluIHRoZSBCT0RZIGRvbWFpbinigJRidXQgYWxzbyBpbiB0aGF0IHRoZWlyIG1lbnRhbCBjYXBhY2l0aWVzIGFyZSBtb3JlIF92YXJpYWJsZV8gYWNyb3NzIHNwZWNpZmljIGVudGl0aWVzIGFuZCBtb3JlIF9jb3JyZWxhdGVkXyBhY3Jvc3MgZG9tYWlucyAoQk9EWSwgSEVBUlQsIGFuZCBNSU5EKS4gVGhlc2UgbnVhbmNlc+KAlHdoaWNoIG1pZ2h0IGJlIGNoYXJhY3Rlcml6ZWQgYXMgIm92ZXItaHlwb3RoZXNlcyIgYWJvdXQgdGhlIG1lbnRhbCBsaXZlcyBvZiBhbmltYXRlcyB2cy4gaW5hbmltYXRlcyBbWFggQ0lURV3igJRhcHBlYXIgdG8gZW1lcmdlIGF0IGEgbGF0ZXIgcG9pbnQgaW4gdGhlIGRldmVsb3BtZW50LgoKQXMgaW4gcHJldmlvdXMgY2hhcHRlcnMsIHRoaXMgaXMgbm90IHRoZSBvbmx5IHBvc3NpYmxlIGludGVycHJldGF0aW9uIG9mIHRoZSBwYXR0ZXJuIG9mIHJlc3VsdHMgcHJlc2VudGVkIGhlcmU7IEkgaGF2ZSBpbnRlbnRpb25hbGx5IHN0YXRlZCB0aGVzZSBoeXBvdGhlc2VzIGluIHRoZWlyIHN0cm9uZ2VzdCBmb3JtLCB0byBmYWNpbGl0YXRlIGNvbmZpcm1hdG9yeSB0ZXN0cyBpbiBmdXR1cmUgcmVzZWFyY2guIFRoZSBwcmltYXJ5IHJvbGUgb2YgdGhlIHN0dWRpZXMgYW5kIGFuYWx5c2VzIGRpc2N1c3NlZCBoZXJlIGhhcyBiZWVuIHRvIGluc3BpcmUgdGhlIGh5cG90aGVzaXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGggYW5kIHRvIHRoZSBmb3VuZGF0aW9uIGZvciB0aGVzZSBmdXR1cmUgc3R1ZGllcy4gIAoKVGhpcyBtYXJrcyB0aGUgZW5kIG9mIG15IGV4cGxvcmF0aW9uIG9mIHRoZSBsYXJnZSwgcmljaCBkYXRhc2V0cyBlbWVyZ2luZyBmcm9tIFN0dWRpZXMgMS00LiBJbiB0aGUgbmV4dCBhbmQgZmluYWwgY2hhcHRlciwgSSBzdGVwIGJhY2sgdG8gcmVmbGVjdCBvbiB3aGF0IHRoZXNlIHRocmVlICJwYXNzZXMiIGF0IGFuYWx5c2lzIGhhdmUgcmV2ZWFsZWQgYWJvdXQgY29uY2VwdHVhbCBkZXZlbG9wbWVudCBpbiB0aGlzIGRvbWFpbiwgaG93IHRoZXNlIHRocmVlIGFzcGVjdHMgb2YgY29uY2VwdHVhbCBkZXZlbG9wbWVudCAoY29uY2VwdHVhbCB1bml0cywgcmVsYXRpb25hbCBvcmdhbml6YXRpb24sIGFuZCBkZXBsb3ltZW50KSBtaWdodCBiZSByZWxhdGVkIHRvIG9uZSBvdGhlciwgYW5kIHdoYXQgdGhpcyBjYXNlIHN0dWR5IG9mIHJlcHJlc2VudGF0aW9ucyBvZiBtZW50YWwgbGlmZSBtaWdodCByZXZlYWwgYWJvdXQgY29uY2VwdHVhbCBkZXZlbG9wbWVudCBtb3JlIGJyb2FkbHkuCgo=